Выделить заголовки |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Выделить заголовки |
Milena |
29.11.2004 17:32
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
В строке необходимо,чтоб те слова, которые идут после точки трех(и более) пробелов начинались с большой буквы.
Сижу ,мучаюсь, ничего не получается... |
volvo |
29.11.2004 17:35
Сообщение
#2
|
Гость |
Milena
Что значит не получается? Значит, что-то пробовали? Где проблема? |
Milena |
29.11.2004 17:39
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
ну жа проьывали...Я не знаю как организовать проверку было перед словом точка с тремя или более пробелами...вот ...
|
FreeMan |
29.11.2004 17:45
Сообщение
#4
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
Посимвольно проверяй строку на наличие точки. Если нашла точку, то проверяешь, есть ли там три пробела и, если есть, занимаешься поиском следующего слова, в котором заменяешь первую букву на заглавную
-------------------- бб
|
Milena |
29.11.2004 17:50
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
Ну типа я этим же и руководствовалась вот уже целый час в попытках что-нибудь написать
|
volvo |
29.11.2004 18:02
Сообщение
#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 - 29.11.2004 18:03 |
FreeMan |
29.11.2004 18:09
Сообщение
#7
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
Цитата Upcase придется заменить на что-то, что корректно переводит кириллицу в верхний регистр... разве upcase делает это с глюками? -------------------- бб
|
volvo |
29.11.2004 18:11
Сообщение
#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 - 29.11.2004 18:12 |
Milena |
29.11.2004 18:18
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
спасибо ...
но я так думаю, что мнеж все же придется работать со стракой посимвольно, т.е. его элементы будут типа char, ведь у меня может на входе быть громадный текст и весь его надо будет обработать. Что-то только я не понимаю как с символами работать....Может кинить какой-нибудь примерчик , ну чтоб я хоть посмотрела... |
volvo |
29.11.2004 18:22
Сообщение
#10
|
Гость |
Milena
Значит так: скорее всего, текст будет в текстовом файле. Тогда нужно просто построчно читать файл и прогонять каждую строку через то, что я написал. |
FreeMan |
29.11.2004 18:30
Сообщение
#11
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
volvo, без цитаты не поверил бы, thanks. Щас сяду писать UpCase :D
-------------------- бб
|
Jahnerus |
29.11.2004 18:31
Сообщение
#12
|
Уникальный Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 2 |
Чтобы заменить русские буквы на большие в DOS кодировке проще всего сделать это самому ... ручками ...
Можно задать две строки a='абвгд...' b='АБВГД...' и заменять a[i] на b[i] -------------------- Век живи, век учи С © by Jahnerus
|
volvo |
29.11.2004 18:31
Сообщение
#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 - 29.11.2004 18:37 |
Jahnerus |
29.11.2004 18:36
Сообщение
#14
|
Уникальный Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 2 |
Можно попробовать так
Код function upcase_rus(var Ch:char):char; const a='абвгд';{весь алфавит до конца!!!} b='АБВГД'; begin upcase_rus:=b[pos(ch,a)]; end; Сообщение отредактировано: Jahnerus - 29.11.2004 18:38 -------------------- Век живи, век учи С © by Jahnerus
|
volvo |
29.11.2004 18:37
Сообщение
#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 - 29.11.2004 18:48 |
GoodWind |
29.11.2004 18:42
Сообщение
#16
|
Автооответчик Группа: Модераторы Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: 16 |
Цитата Можно сделать гораздо удобнее: ИМХО, идеальный вариант -------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
Milena |
29.11.2004 18:49
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
я это сделала примерно так как VOLVO...спасибо ребята. Вы мне очень помогли.
|
Milena |
30.11.2004 13:14
Сообщение
#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 - 30.11.2004 13:20 |
Milena |
30.11.2004 13:26
Сообщение
#19
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Репутация: 0 |
Спасибо volvo, но я даж не знала про теги....теперь буду знать :-)
Добавлено (30.11.04 12:35): Ну я и балда...такую глупую ошибку совершила :-) ....Я разобралась :-) |
volvo |
30.11.2004 13:35
Сообщение
#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. |
Текстовая версия | 14.06.2024 15:39 |