Задача: Вводится строка содежащая симолы латинского и русского алфавита, цифры и так далее. Сиволы русского алфавита подчеркнуть (просто при выводе следующей строки на месте сивола русского алфавита выводить знак подчеркивание). Проблем с этим не было, но вот когда еще при этом заменяешь все символы не принадлежащие русскому алфавиту на пробел, происходит проблем следующего рода: обрабатываются только первых 32 симовла, не пойму как ее решить, далее код программы
uses crt; var s:string; i:byte; begin clrscr; readln(s); writeln(length(s)); {s1:=s;} for i:=0 to length(s) do begin if (((ord(s[i])>=128) and (ord(s[i])<=175) ) or ( (ord(s[i]) >= 224) and (ord(s[i]) <= 241) )) then s[i]:='-' else s[i]:=' '; end; writeln(s); readkey end.
Айра
2.01.2009 4:23
Ошибка тут:
Цитата
for i:=0 to length(s) do
В нулевом элементе строки хранится ее текущая длина, а это, конечно же, не буква русского алфавита, поэтому ты и заменяешь ее на пробел (код которого, по-моему, как раз таки 32) и дальше length(s) уже вычисляется неправильно.. Так что с цикл с единички начинать надо
Account
2.01.2009 4:43
Айра, спасибо! А я и забыл про значение 0-ого элемента строки( Совсем от рук отбился. Еще раз респект тебе;)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.