Выделить заголовки |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Выделить заголовки |
Milena |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
В строке необходимо,чтоб те слова, которые идут после точки трех(и более) пробелов начинались с большой буквы.
Сижу ,мучаюсь, ничего не получается... |
volvo |
Сообщение
#2
|
Гость |
Milena
Что значит не получается? Значит, что-то пробовали? Где проблема? |
Milena |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
ну жа проьывали...Я не знаю как организовать проверку было перед словом точка с тремя или более пробелами...вот ...
|
FreeMan |
Сообщение
#4
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
Посимвольно проверяй строку на наличие точки. Если нашла точку, то проверяешь, есть ли там три пробела и, если есть, занимаешься поиском следующего слова, в котором заменяешь первую букву на заглавную
-------------------- бб
|
Milena |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
Ну типа я этим же и руководствовалась вот уже целый час в попытках что-нибудь написать
|
volvo |
Сообщение
#6
|
Гость |
Milena
Вот функция. Попробуй разобраться в алгоритме... (Upcase придется заменить на что-то, что корректно переводит кириллицу в верхний регистр...) Код const s: string = 'this is a . test and. this is not'; var i, p: byte; count: integer; curr_p: integer; begin curr_p := 1; repeat p := pos('.', copy(s, curr_p, length(s))); if p > 0 then begin count := 0; i := curr_p + p; while s[i] = ' ' do begin inc(count); inc(i) end; if count > 2 then s[i] := upcase(s[i]) end; curr_p := i; until p = 0; writeln(s); end. Сообщение отредактировано: volvo - |
FreeMan |
Сообщение
#7
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
Цитата Upcase придется заменить на что-то, что корректно переводит кириллицу в верхний регистр... разве upcase делает это с глюками? -------------------- бб
|
volvo |
Сообщение
#8
|
Гость |
FreeMan
Upcase насколько мне известно (об этом написано в документации на TP) вообще оставляет кириллицу без изменений. Цитата Converts a character to uppercase. Declaration: function UpCase(Ch: Char): Char; Remarks: Ch is an expression of type Char. The result of type Char is Ch converted to uppercase. Character values not in the range a..z are unaffected. Сообщение отредактировано: volvo - |
Milena |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
спасибо ...
но я так думаю, что мнеж все же придется работать со стракой посимвольно, т.е. его элементы будут типа char, ведь у меня может на входе быть громадный текст и весь его надо будет обработать. Что-то только я не понимаю как с символами работать....Может кинить какой-нибудь примерчик , ну чтоб я хоть посмотрела... |
volvo |
Сообщение
#10
|
Гость |
Milena
Значит так: скорее всего, текст будет в текстовом файле. Тогда нужно просто построчно читать файл и прогонять каждую строку через то, что я написал. |
FreeMan |
Сообщение
#11
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
volvo, без цитаты не поверил бы, thanks. Щас сяду писать UpCase :D
-------------------- бб
|
Jahnerus |
Сообщение
#12
|
Уникальный Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 2 |
Чтобы заменить русские буквы на большие в DOS кодировке проще всего сделать это самому ... ручками ...
Можно задать две строки a='абвгд...' b='АБВГД...' и заменять a[i] на b[i] -------------------- Век живи, век учи С © by Jahnerus
|
volvo |
Сообщение
#13
|
Гость |
Тогда так:
Код Function CheckStr(s: String): String; var i, p: byte; count: integer; curr_p: integer; begin curr_p := 1; repeat p := pos('.', copy(s, curr_p, length(s))); if p > 0 then begin count := 0; i := curr_p + p; while s[i] = ' ' do begin inc(count); inc(i) end; if count > 2 then s[i] := upcase(s[i]) end; curr_p := i; until p = 0; CheckStr := s; end; Var f, fOut: text; s: string; Begin assign(f, 'mytext.txt'); reset(f); assign(fOut, 'newtext.txt'); rewrite(fOut); while not seekeof(f) do begin readln(f, s); s := CheckStr(s); { Полученную строчку можно вывести на экран, а можно записывать в другой файл...} WriteLn(fOut, s); end; Close(fOut); Close(f); End. Сообщение отредактировано: volvo - |
Jahnerus |
Сообщение
#14
|
Уникальный Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 2 |
Можно попробовать так
Код function upcase_rus(var Ch:char):char; const a='абвгд';{весь алфавит до конца!!!} b='АБВГД'; begin upcase_rus:=b[pos(ch,a)]; end; Сообщение отредактировано: Jahnerus - -------------------- Век живи, век учи С © by Jahnerus
|
volvo |
Сообщение
#15
|
Гость |
Jahnerus
Можно сделать гораздо удобнее: Код Function UpCase(Ch:Char):Char; Begin Case Ch Of 'a'..'z':UpCase:=Chr(Ord(Ch)-$20); 'а'..'п':UpCase:=Chr(Ord(Ch)-$20); 'р'..'я':UpCase:=Chr(Ord(Ch)-$50); Else UpCase := Ch End End; © Oleg_Z Сообщение отредактировано: volvo - |
GoodWind |
Сообщение
#16
|
Автооответчик Группа: Пользователи Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: 16 |
Цитата Можно сделать гораздо удобнее: ИМХО, идеальный вариант -------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
Milena |
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
я это сделала примерно так как VOLVO...спасибо ребята. Вы мне очень помогли.
|
Milena |
Сообщение
#18
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
Плиз проверьте прогу...читаю файл по символьно...если делать без проверки на конец файла (not eof),обрабатывается тока одна строка....а с проверкой на конец файла прога зацикливается....
Вот код: Код program Verhnii_registr; uses crt; var ch: char; i : byte; count:integer; fin,fout:text; Function UpStr(S:char):char; {перевод строки в верхний регистр} Var I:Byte; Begin if S in ['a'..'z'] then S := UpCase(S) else begin if S in ['а'..'п'] then S:=Chr(Ord(S)-$20) else if S in ['р'..'я'] then S:=Chr(Ord(S)-$50); end; UpStr:=S; end; begin clrscr; assign(fin,'in.txt'); reset(fin); assign(fout,'out.txt'); rewrite(fout); count:=0; while not eof(fin) do while not eoln(fin) do begin read (fin,ch); if ch=' ' then count:=count+1 else if count>2 then begin ch:= UpStr(ch); count:=0; end; write(fout,ch); end; close(fin); close(fout); end. Не забывай теги [ code] [ /code] Сообщение отредактировано: volvo - |
Milena |
Сообщение
#19
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
Спасибо volvo, но я даж не знала про теги....теперь буду знать :-)
Добавлено (30.11.04 12:35): Ну я и балда...такую глупую ошибку совершила :-) ....Я разобралась :-) |
volvo |
Сообщение
#20
|
Гость |
Я немножко изменил программу. У меня отработала без проблем. Попробуй...
Код program Verhnii_registr; uses crt; var ch: char; i : byte; count:integer; fin,fout:text; Function UpStr(S:char):char; {перевод строки в верхний регистр} Var I:Byte; Begin if S in ['a'..'z'] then S := UpCase(S) else begin if S in ['а'..'п'] then S:=Chr(Ord(S)-$20) else if S in ['р'..'я'] then S:=Chr(Ord(S)-$50); end; UpStr:=S; end; begin clrscr; assign(fin,'in.txt'); reset(fin); assign(fout,'out.txt'); rewrite(fout); count:=0; while not eof(fin) do begin read (fin,ch); if ch=' ' then count:=count+1 else begin if count>2 then ch:= UpStr(ch); count:=0; end; write(fout,ch); end; close(fin); close(fout); end. |
Текстовая версия | 12.01.2025 3:00 |