![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Дымка |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Дана строка, содержащая текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается точкой или восклицательным знаком). Получить в новой строке отредактированный текст, в котором удалены подряд идущие вхождения слов в предложениях.
Не понимаю, как ее сделать!!Помогите, пожалуйста!! |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Поиском не пробовал пользоваться? Я по-моему уже выкладывал что-то подобное...
const |
Дымка |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Спасибо большое!!!...Только почему-то после нажатия сtrl F9 ничего не происходит
![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Может уже произошло, и надо нажать на Alt+F5 чтобы посмотреть результат?
|
Дымка |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Выдает измененную строку, но 33 раза подряд...
![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Ну, я же не просто так сюда решение закинул, наверное... Почему у меня работает, а у тебя нет? Значит, код менял... Или столько раз запускал программу до этого... Попробуй в начало поставить ClrScr и потом запустить...
В-общем, вот тебе файл (с латинскими символами, извини, но кириллица есть не у всех...) - запусти, а потом поменяй алфавит и строку на русские... Прикрепленные файлы ![]() |
Дымка |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Еще раз огромное спасибо...И еще один дурацкий вопрос, прости, но как еще можно сделать, чтобы вне зависимости от регистра повторные слова удалялись? Т.е программа не удаляет Ya ya, к примеру...Из-за первой Y
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Переводи всю строку в верхний регистр:
s_res := StrUpper(s); { вместо s_res := s; } Саму функцию StrUpper можешь взять здесь: FAQ: Модуль для работы со строками |
Дымка |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
И за это спасибо...Хотя возник еще один вопрос...Удаляет правильно. Потом, с помощью StrLower возвращаюсь к первоначальному виду.Как сделать, чтобы заглавная буква была. а не все маленькие?
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
А, так тебе же к первоначальному виду возврашаться надо...
![]() if StrUpper(_word) = StrUpper(prev) then begin и не надо исправлений, о которых я говорил в посте №8... |
Дымка |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Че-то я совсем запуталась...
Код Program Stroki; uses crt; Function StrUpper(s: String): String; Var i: Byte; Begin For i := 1 To Ord(s[0]) Do Case s[i] Of 'a' .. 'z': s[i] := Chr(Ord(s[i])-$20); #160 .. #175: s[i] := Chr(Ord(s[i])-$20); #224 .. #239: s[i] := Chr(Ord(s[i])-$50) End; StrUpper := s End; Function StrLower(s: String):String; Var i: Byte; Begin For i := 1 To Ord(s[0]) Do Case s[i] Of 'A' .. 'Z': s[i] := Chr(Ord(s[i])+$20); #128 .. #143: s[i] := Chr(Ord(s[i])+$20); #144 .. #159: s[i] := Chr(Ord(s[i])+$50) End; StrLower := s End; const stUpper = ['A' .. 'Z', #128 .. #159]; abc = ['a'..'z','A'..'Z','1'..'9']; var s_res, prev, word: string; p: integer; S: string; stnew: string; blank: boolean; i: integer; begin clrscr; Write('Vvedite stroku,kotoraya zakan4ivaetsya'); Writeln(' na vosklicatelniy znak ili to4ku'); Readln(s); s_res :=StrUpper(s); prev := ''; p := 1; repeat while not (s_res[p] in abc) and (p <= length(s_res)) do P:=p+1; while (s_res[p] in abc) and (p <= length(s_res)) do begin word := word + s_res[p]; P:=p+1; end; if word = prev then begin delete(s_res, p - length(word), length(word)); dec(p, length(word)); end else prev := word; word := ''; until p > length(s_res); blank:= false; stnew:= ' '; for i:= 1 to length(s_res) do begin if s_res[i] <>' ' then begin stnew:= stnew + s_res[i]; blank:= false; end else if (not blank) then begin stnew:= stnew +s_res[i]; blank:=true; end; end; while stnew[1]=' ' do stnew:=copy(stnew,2,255); while stnew[length(stnew)]=' ' do delete(stnew,length(stnew),1); s_res:=StrLower(stnew); writeln (s_res); end. |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Ну не надо ничего придумывать... Я же сказал, что надо было сделать:
Function StrUpper(s: String): String; |
Дымка |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Запихнула туда еще удаление пробелов и все пошло замечательно!! Спасибо огромное
![]() Теперь еще одна задача, и можно приступать к созданию меню.... |
Дымка |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
А можно еще пару глупых вопросов и с этой задачей покончено?!
For i := 1 To Ord(s[0]) Do Case s[i] Of 'a' .. 'z': s[i] := Chr(Ord(s[i])-$20); #160 .. #175: s[i] := Chr(Ord(s[i])-$20); #224 .. #239: s[i] := Chr(Ord(s[i])-$50) End; Паскаль мой почти на школьном уровне, поясните . пожалуйста про Chr и Ord . Не совсем понимаю, что будет выполняться. и что значит -$20 И вот эту строчку...dec(p, length(_word)) |
klem4 |
![]()
Сообщение
#15
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата(Дымка @ 10.07.05 14:27) А можно еще пару глупых вопросов и с этой задачей покончено?! For i := 1 To Ord(s[0]) Do Case s[i] Of 'a' .. 'z': s[i] := Chr(Ord(s[i])-$20); #160 .. #175: s[i] := Chr(Ord(s[i])-$20); #224 .. #239: s[i] := Chr(Ord(s[i])-$50) End; Паскаль мой почти на школьном уровне, поясните . пожалуйста про Chr и Ord . Не совсем понимаю, что будет выполняться. и что значит -$20 И вот эту строчку...dec(p, length(_word)) Все просто : Chr(97)='a' ord('a')=97 обратные друг к другу ф-и одна возвращает код по символу, а другая символ по коду dec( a,b ) равносильно a:=a-b; inc( a,b ) равносильно a:=a+b; dec(a) равносильно a:=a-1; inc(a) равносильно a:=a+1; соответственно dec(p, length(_word)) - уменьшает p на величину, равную длинне строки _word Сообщение отредактировано: klem4 - 10.07.2005 13:42 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Цитата(Дымка @ 10.07.05 13:11) Запихнула туда еще удаление пробелов и все пошло замечательно!! Ты тот модуль, на который я ссылку давал, внимательно смотрела? Функцию Function StrOneSpace(s: String): String;там видела? Она как раз и удаляет из строки все лишние пробелы... ![]() |
Дымка |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
а -$20, -$50?? это надо понимать, шестнадцатиричные числа...при чем тут они?
|
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
При том, что разность кодов символов в верхнем и нижнем регистре составляет или $20 (оно же 32 десятичное) или $50 (80 десятичное) в зависимости от самого символа...
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:12 |