2010-06-14 3 views
0

Donc, ci-dessous j'ai un code en C++ qui est censé inverser les arguments dans un vecteur, mais pas la séquence. J'ai énuméré mes problèmes comme sidenotes dans le code ci-dessous. La fonction inverse est censé inverser chaque argument, et la fonction principale produit juste les mots inversés dans la même ordre Par exemple, le programme (« un deux trois quatre ») = Ruof eerth owt enoLe programme ne compilera pas

#include <iostream> 
#include <string> 
using namespace std; 

int invert(string normal) 
{ 
    string inverted; 
    for (int num=normal.size()-1; num>=0; num--) 
    { 
     inverted.append(normal[num]); //I don't know how to get each character 
              //I need another command for append 
    } 
    return **inverted**; <---- 
} 

int main(int argc, char* argv[]) 
{ 
    string text; 
    for (int a=1; a<argc; a++) 
    { 
     text.append(invert(argv[a])); //Can't run the invert function 
     text.append(" "); 
    } 
    cout << text << endl; 
    return 0; 
} 

Répondre

3

Le problème est que normal[num] est un personnage. append() n'a pas de surcharge pour les caractères.

Vous pouvez utiliser inverted.push_back(normal[num]);

Voir la string API.

Je dois ajouter quelques autres notes:

0) Pourquoi vous retournerez int de invert()? inverted est une chaîne, vous devez donc retourner une chaîne:

`string invert(string normal);` 

1) Plutôt que d'utiliser num pour itérer, vous pouvez utiliser reverse_iterators:

for (string::reverse_iterator c = normal.rbegin(); c!=normal.rend(); ++c) { 
    inverted.push_back(*c); 
} 

2) Lors du passage des chaînes à fonctions qui ne sont pas modifiées dans la fonction, vous devez passer par référence pour éviter les copies de chaînes supplémentaires. vous traversiez 0..argc, afin que vos chaînes seront renversées en arrière de ce qui est attendu, si je comprends bien vos besoins

string invert(const string &normal); 

3).

Questions connexes