Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Работа со строкой (проблема в выполнении)

Автор: Account 2.01.2009 2:09

Задача: Вводится строка содежащая симолы латинского и русского алфавита, цифры и так далее. Сиволы русского алфавита подчеркнуть (просто при выводе следующей строки на месте сивола русского алфавита выводить знак подчеркивание). Проблем с этим не было, но вот когда еще при этом заменяешь все символы не принадлежащие русскому алфавиту на пробел, происходит проблем следующего рода: обрабатываются только первых 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) уже вычисляется неправильно..
Так что с цикл с единички начинать надо smile.gif

Автор: Account 2.01.2009 4:43

Айра, спасибо! А я и забыл про значение 0-ого элемента строки( Совсем от рук отбился. Еще раз респект тебе;) give_rose.gif