2013-09-29 6 views
0

Je commence en C++ et j'ai une tâche simple. Comme le dit le titre, je veux supprimer le premier et le dernier caractère d'une chaîne pour x fois (où x est la longueur de la chaîne). Par exemple, si la chaîne est "exemple", le résultat sera:
example
xampl
amp
m
amp
xampl
example
Supprimer les caractères forment une chaîne en C++

Jusqu'à présent, je pense comme ceci:

#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;  
} 

Ou quelque chose comme ça ... Est-ce que quelqu'un peut m'aider ?

+0

pourquoi ne pas utiliser ['substr'] (http://www.cplusplus.com/reference/ string/string/substr /) – jozxyqk

+1

Vous vous interrogez sur la suppression d'éléments, mais dans votre exemple, votre chaîne commence mystérieusement à se reconstituer. Avez-vous omis une partie du problème? – juanchopanza

Répondre

0

Le problème est que

  • vous ne pouvez pas utiliser std::string::erase avec indice entier tels que int i,
    vous devez utiliser std::string::iterator

  • , mais même si vous utilisez std::string::iterator, avec la logique actuelle vous essayez d'incrémenter un itérateur après que le erase a été appelé. (un tel itérateur n'est pas valide)
    Solution possible: attribuez sir.begin() à votre itérateur après chaque erase.

Voilà comment cela pourrait ressembler à:

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

sorties:

xample 
ample 
mple 
ple 
le 
e 

noter que juste après avoir effacé les caractères de votre std::string, ces personnages sont perdus. Vous ne pouvez pas les "restaurer". Pour l'autre moitié, vous devrez venir avec une approche plus sophistiquée, mais je vous laisserai :)

+0

Merci beaucoup. C'était très utile! –

1

Vous souhaitez supprimer à la fois le premier et le dernier char. Mais dans l'exemple, vous les avez également ajoutés à chaque étape. Ce n'est pas vraiment clair ce que vous voulez. Quoi que vous vouliez supprimer ou ajouter les caractères, il est possible de garder la chaîne inchangée. Donc, vous devez utiliser sous. Vérifiez-le here.

Questions connexes