2010-01-04 5 views
0

dans le code ci-dessous i m essayant d'inverser la chaîne il n'y a pas d'erreur de compilation, mais rien n'est affiché. Quel est le problème?quelle est l'erreur dans ce code

string string1="arunachalam"; 

    void reverseStr() 
    {   
     for(int i=string1.length();i<0;i--) 
     { 
      cout<<string1[i]; 
     } 
    } 

Répondre

4

Le problème est dans la déclaration int i=string1.length(), puisque les indices sont basés 0 il devrait être int i=string1.length() - 1 En outre, votre i < 0 état est mauvais, je vais le laisser travailler par vous-même.

+0

Et le "i <0" devrait être "i <= 0". – imaginaryboy

+2

non il devrait être i> = 0 .. – Naveen

+0

J'ai également essayé que – Arunachalam

8

Votre condition de boucle i < 0 est le principal responsable. Les boucles se terminent immédiatement car la longueur d'une chaîne n'est jamais négative. Remplacez par i >= 0.

Vous devez également avoir i = string1.length() - 1 car les index de chaîne sont basés sur zéro. Ainsi:

for(int i = string1.length() - 1; i >= 0; i--) { 
    cout << string1[i]; 
} 
+0

Toute cette confusion montre qu'un idiome propre est nécessaire pour la boucle en arrière. Et il existe (en plus des itérateurs inverses): 'pour (unsigned i = string1.size(); i -> 0;)' http://stackoverflow.com/questions/1642028/what-is-the-name-of -this-operator :) – UncleBens

1

Je suis désolé, mais il devrait être i> 0 pour faire ce travail

+0

Pas si vous voulez afficher le premier caractère de la chaîne. – UncleBens

1

De loin la plus, la solution off-by-one-stop-sécurité et conditions de sécurité pour cette utilise l'itérateur inverse - en supposant que ce soit une chaîne std :: que vous utilisez.

string string1="arunachalam"; 
void reverseStr() 
{ 
    string::const_reverse_iterator cur; 
    // .rbegin() returns iterator to reverse-begin, i.e. the end ... 
    // operator++ on a reverse iterator does move it in the "right" 
    // (desired) direction. 
    for(cur=string1.rbegin(); cur!=string1.rend(); cur++) 
     cout << *cur; 
} 
2

Une fonction est plus utile si elle ne pas reposent sur des variables globales. En utilisant des arguments et des valeurs de retour comme avec la signature:

const string& reverseStr(const string& s); 

serait plus utile. La définition pourrait utiliser le reverse_iterator de std :: string ainsi:

const string& reverseStr(const string& s) 
{ 
    return string(s.rbegin(), s.rend()); 
} 

suivie par l'utilisation réelle:

string string1="arunachalam"; 

cout << reverseStr(string1); // XXX: add an endl, if needed