2013-08-12 19 views
0

Хорошо, это может быть глупый вопрос, но я продолжу и спрошу в любом случае.std :: ошибки, связанные с строкой и связанные с ними, C++

Итак, мне было интересно, каковы все возможные ошибки, связанные с использованием std :: string? Я знаю несколько, например, доступ к символу в местоположении больше, чем размер std :: string в различных функциях std :: string.

При программировании каких ошибок следует помнить и проверять места?

И есть ли другой способ сделать следующее, например, эффективно?

std::string s("some string."); 

int i = s.find ("."); 


if ( i != std::string::npos && i + 3 < s.length () ) // <<== this check is what I am talking about 
    s.erase (i + 3); 

У меня есть программа, которая требует сотни таких проверок, поэтому мне было интересно, там был другой путь тогда делать, если (some_condition) каждый раз.

+1

введите его в функцию. –

+0

@ LuchianGrigore, который кажется лучшим вариантом. – StudentX

+0

@StudentX: Итак, вы получили свой ответ? –

ответ

2

Вам не нужно указывать все случаи ошибок для всего класса; просто найдите документацию для функций, которые вы используете, что обычно перечисляет предварительные условия.

Например, cppreference.com's page on std::string::erase.

0

Если i больше длины строки, out_of_range исключение

Ref: - std::string::erase

Таким образом, вы всегда можете поймать его!

std::string s("some string."); 
int i = s.find ("."); 

if (i != std::string::npos) 
try 
{ 
    s.erase (i + 3); 
} 
catch (const std::out_of_range& err) 
{ 
    std::cerr << "Out of Range error: " << err.what() << std::endl; 
} 
+1

Но тогда в этом случае этот подход может быть нецелесообразным _if_ входные строки с. В произвольных являются вполне законными и ожидаемыми. Если эта ситуация указывает на поврежденные данные или что-то в этом роде, я согласен с тем, что бросать исключение и обрабатывать его действительно может быть лучшим способом. – Hulk

+0

К сожалению, это не делает жизнь легкой :( – StudentX

+0

@StudentX ну тогда в этом случае я бы предложил написать свою собственную «стирать» и которая провела проверку границ на 'pos' – P0W

Смежные вопросы