Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > При работе со строкой выкидывает ошибку..


Автор: onehalf 10.4.2011, 00:17
Помогите плз, очень досадная ошибка:
пытаюсь удалить из строки str все лишние пробелы(оставить только по одному между словами):

while (ii>0)
{
 ii=str.Pos("  ");
 str.Delete(ii,1);
} 

выкидывает ошибку: "Project ProjectName.exe raiced exception class EAccessViolation with message "Access violation at address..."", сылается на функцию в модуле dstring.h:  
ThrowIfOutOfRange(idx);   // Should Range-checking be optional to avoid overhead ??

Пытался выделываться с функциями IsDelimiter и SubString и контролировать выход за пределы строки всеразличными условиями -- все равно тот же результат.. 

все эти способы описаны в книге Федоренко, но ни один из них не получается..

пробовал использовать универсальную функцию:
str = StringReplace(str, "  ", " ", TReplaceFlags() << rfReplaceAll);
к счастью ошибок не выдает, но str остается неизменной..

Автор: borisbn 10.4.2011, 00:36
while (ii>0) не поможет, когда  ii=str.Pos("  "); вернёт 0

добавь 
Код

    if ( ii > 0 )
        str.Delete(ii,1);


Автор: onehalf 10.4.2011, 09:19
выкидывает все ту же ошибку(..

Автор: borisbn 10.4.2011, 11:46
1. Под отладкой на какой строке твоего кода это возникает ?
2. Создай проект, в котором будет только эти строки и проверь
Код

AnsiString str = "  a  b  ";
int ii;
do {
   ii = str.Pos( "  " );
   if ( ii >0 )
     str.Delete( ii, 1 );
} while (ii>0);


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)