Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2011, 21:48   #1
just4smth
_____________
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 30
По умолчанию [Pascal] Удаление символов из строки

Задание:
Цитата:
Удалить из текста все запятые.
Реализация:
Код:
Program var15_stroki;
Uses crt;
Var s:string;
    i,endstr:integer;

Begin
        clrscr;
        Writeln('Введите строку');
        Readln(s);
        endstr:=Length(s);
        for i:=1 to endstr do
           if s[i]=',' then
           Delete(s,i,1);
        Writeln(s);

        Readln;
End.
Однако, если заменяемые символы стоят подряд, то удаляется только первый. Как это исправить?
just4smth вне форума Ответить с цитированием
Старый 14.05.2011, 22:11   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Наверное проще бы было здесь так:
Код:
for i:=1 to endstr do
  if s[i]<>',' then
  s1:=s1+s[i];
Если повнимательнее присмотритесь к своему циклу, то поймете, что размер строки после каждой найденной запятой уменьшается. За счет этого происходит смещение
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 14.05.2011, 22:22   #3
just4smth
_____________
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 30
Радость

Цитата:
Сообщение от MyLastHit Посмотреть сообщение
Наверное проще бы было здесь так:
Код:
for i:=1 to endstr do
  if s[i]<>',' then
  s1:=s1+s[i];
Если повнимательнее присмотритесь к своему циклу, то поймете, что размер строки после каждой найденной запятой уменьшается. За счет этого происходит смещение
Большое спасибо, сам бы точно не додумался до такого.
just4smth вне форума Ответить с цитированием
Старый 14.05.2011, 22:22   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так происходит потому что строка уменьшается на 1 символ и вы "перепрыгиваете" его.
У меня получился только вот такой костыль (войдет в бесконечный цикл если запятая - последний символ строки):
Код:
for i:=1 to endstr do
           if s[i]=',' then
           begin
              Delete(s,i,1);
              i:=i-1;
              endstr:=endstr-1;
           end;
upd: а, уже выше нормальный вариант
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 14.05.2011 в 22:27.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2011, 22:27   #5
just4smth
_____________
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 30
По умолчанию

Цитата:
У меня получился только вот такой костыль (войдет в бесконечный цикл если запятая последний - символ строки):
Код:
for i:=1 to endstr do
           if s[i]=',' then
           begin
              Delete(s,i,1);
              i:=i-1;
              endstr:=endstr-1;
           end;
К стати всё равно не все удаляются
UPD: А скобки поставил, вообще с ошибкой выполняется.

Последний раз редактировалось just4smth; 14.05.2011 в 22:30.
just4smth вне форума Ответить с цитированием
Старый 14.05.2011, 22:29   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

У меня все удаляется из строка вида afff,,fd,,,ffd,,f,f
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2011, 22:35   #7
just4smth
_____________
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
У меня все удаляется из строка вида afff,,fd,,,ffd,,f,f
Код:
Program var15_stroki;
Uses crt;
Var s,snew:string;
    i,endstr:integer;

Begin
        clrscr;
        Writeln('Введите строку');
        Readln(s);
        endstr:=Length(s);
        for i:=1 to endstr do
           if s[i]=',' then
           begin
              Delete(s,i,1);
              i:=i-1;
              endstr:=endstr-1;
           end;
        Writeln(s);

        Readln;
End.
Цитата:
123.pas(15,21) Error: Illegal assignment to for-loop variable "i"
Строку с ошибкой выделил красным.

Последний раз редактировалось just4smth; 14.05.2011 в 22:39.
just4smth вне форума Ответить с цитированием
Старый 14.05.2011, 22:45   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вероятно не все компиляторы это воспринимают нормально ) (собственно об этом и говорит эта ошибка)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2011, 22:52   #9
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Нельзя в цикле for изменять счетчик.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 14.05.2011, 23:00   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Некоторые компиляторы позволяют это сделать (у меня Free pascal 1.0.6).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление из строки лишних символов maxefficiently Общие вопросы Delphi 2 01.03.2011 08:53
Удаление символов из строки NAS1977mu Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 09.01.2011 13:05
Удаление из строки всех не alpha символов skeletor PHP 3 12.07.2010 17:28
Удаление символов из строки Jasper92 Общие вопросы C/C++ 1 17.01.2010 20:41
Удаление символов из строки stscolt Помощь студентам 0 28.12.2009 12:34