Задача: Вводится строка содежащая симолы латинского и русского алфавита, цифры и так далее. Сиволы русского алфавита подчеркнуть (просто при выводе следующей строки на месте сивола русского алфавита выводить знак подчеркивание). Проблем с этим не было, но вот когда еще при этом заменяешь все символы не принадлежащие русскому алфавиту на пробел, происходит проблем следующего рода: обрабатываются только первых 32 симовла, не пойму как ее решить, далее код программы
uses crt;
var
s:string;
i:byte;
begin
clrscr;
readln(s);
writeln(length(s));
{s1:=s;}for i:=0to length(s) dobeginif (((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-ого элемента строки( Совсем от рук отбился. Еще раз респект тебе;)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.