2013-09-29 3 views
0

Я начинаю с C++ и у меня простая задача. Как сказано в названии, я хочу удалить первый и последний символ из строки для x раз (где x - длина строки). Например, если строка «пример», результат будет:
example
xampl
amp
m
amp
xampl
example
Удалить символы из строки в C++

До сих пор, я имею в виду, как это:

#include <iostream> 
#include <string> 

string sir = "Example"; 
int len, i; 
len = sir.length(); 

for(i=1; i<=len; i++) 
{ 
    sir.erase(sir.begin(), sir.end()); 
    cout<<sir;  
} 

Или что-то подобное ... Кто-нибудь может мне помочь ?

+0

как насчет использования ['substr'] (http://www.cplusplus.com/reference/ string/string/substr /) – jozxyqk

+1

Вы спрашиваете об удалении элементов, но в вашем примере вывод вашей строки начинает таинственно восстанавливаться. Вы оставили часть проблемы? – juanchopanza

ответ

0

Проблема заключается в том, что

  • вы не можете использовать std::string::erase с интегральным индексом, такие как int i,
    вам нужно использовать std::string::iterator

  • , но даже если вы используете std::string::iterator, с текущей логикой вы пытались бы увеличить итератор после вызова erase. (такой итератор недействителен)
    Возможное решение: присвойте sir.begin() вашему итератору после каждого erase.

Вот как это может выглядеть следующим образом:

std::string sir = "Example"; 
for(string::iterator i = sir.begin(); i != sir.end(); i = sir.begin()) 
{ 
    sir.erase(i); 
    std::cout << sir << std::endl; 
} 

выходов:

xample 
ample 
mple 
ple 
le 
e 

Сразу отметим, что после удаления символов из вашего std::string, эти символы будут потеряны. Вы не можете «восстановить» их. Для другой половины вам придется идти с более сложным подходом, но я оставлю это вам :)

+0

Большое спасибо. Это было очень полезно! –

1

Вы хотите удалить как первый, так и последний символ. Но в этом примере вы также добавили их каждый шаг. На самом деле не совсем понятно, что вы хотите. Независимо от того, что вы хотите удалить или добавить символы, можно сохранить строку неизменной. Поэтому вы должны использовать substr. Проверьте это here.

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