L'impression de la chaîne d'entrée des mots dans l'ordre inverse
À l'aide de if
et while
/do
-while
, mon travail consiste à imprimer suivantes de l'utilisateur entrées (chaîne de valeur) dans l'ordre inverse.
Par exemple:
d'entrée de la chaîne de valeur : "Vous êtes Américain"
de sortie dans l'ordre inverse : "de l'Amérique sont Vous"
Est-il possible de faire cela?
J'ai essayé
string a;
cout << "enter a string: ";
getline(cin, a);
a = string ( a.rbegin(), a.rend() );
cout << a << endl;
return 0;
...mais cela aurait pour effet d'inverser l'ordre des mots et d'orthographe alors que l'orthographe n'est pas ce que je vais faire.
J'ai aussi devrait être en ajoutant à if
et while
déclarations, mais n'ont pas la moindre idée de comment.
- Bien sûr, il est.
- la chaîne a; cout << "entrez une chaîne: "; getline(cin, a); a = chaîne de caractères ( un.rbegin(), un.rené() ); cout << a << endl; return 0; cette inversion de l'ENSEMBLE de la chose.. l'ordre et de l'orthographe, mais je ne veux pas de l'orthographe. je ne sais comment je vais être en ajoutant dans le si, et tandis que les états..
- Il serait utile si vous postez votre tentative de code dans la question elle-même? C'est un problème classique, avez-vous essayé de chercher ainsi?
- Ajouter à ton post au lieu de le commentaires pour une meilleure mise en forme.
- Inverser l'ensemble de la chaîne, comme vous le faites, puis d'inverser chaque mot. Il serait extrêmement facile et efficace si vous avez utilisé une classe comme llvm::StringRef.
- j'ai, mais je ne suis pas tellement d'expérience dans la programmation. et oui, j'ai essayé de chercher 🙁
- Souvent la clé de la résolution de ces problèmes est de décrire l'algorithme de mots sans penser en C++ (ou tout autre langage de programmation). Si vous pouviez décrire à un parent âgé, comment faire avec un crayon et du papier, de la conversion de cette description à votre langage de programmation de choix est beaucoup plus facile.
- Vous pourriez être le fractionnement de la chaîne dans un vector alors parcourir le vecteur à partir de la fin vers le début.
Vous devez vous connecter pour publier un commentaire.
L'algorithme est:
string
? Aussi, ce n'est pas en utilisant while/do-while que la question des états.a
par valeur (un exemplaire) et le retour d'unstring
(un autre exemplaire).Ici est un C-approche fondée sur les compiler avec un compilateur C++ qui utilise la pile à minimiser la création de
char *
cordes. Avec un minimum de travail, ce peut être adapté à des classes C++, ainsi que trivialement remplacer les différentsfor
boucles avec undo-while
ouwhile
bloc.Pour compiler avec un compilateur C++, et utiliser ensuite:
Cet exemple extrait de la chaîne en entrée un mot à la fois,
et construire une chaîne de production en ajoutant dans l'ordre inverse.
`
`
Il utilise exactement un chacun de
if
etwhile
.Vous pouvez essayer de cette solution dans l'obtention d'un
vector
destring
's à l'aide de la '' (espace) caractère délimiteur.La prochaine étape serait de faire une itération sur ce vecteur vers l'arrière afin de générer de l'inverse de la chaîne.
Voici à quoi il pourrait ressembler (
split
est la chaîne de fractionnement de la fonction à partir de ce post):Edit 2: Si vous n'aimez pas
vector
s pour quelque raison que ce soit, vous pouvez utiliser des tableaux (à noter que les pointeurs peuvent agir comme des tableaux). Cet exemple alloue un tableau de taille fixe sur le tas, vous pouvez changer cela pour dire, le double de la taille lorsque le mot en cours montant a atteint une certaine valeur.Solution à l'aide d'un
array
au lieu d'unvector
:Modifier: Ajouté comprend,
main
fonction,while
boucle formatCe code ici utilise des bibliothèques de chaînes de caractères pour détecter les blancs dans le flux d'entrée et de réécrire la sortie de la phrase en conséquence
L'algorithme est
1. Obtenir le flux d'entrée à l'aide de getline fonction pour capturer le spacecs. Initialiser pos1 à zéro.
2. Cherchez le premier espace dans le flux d'entrée
3. Si aucun espace n'est trouvé, le flux d'entrée est la sortie
4. Autre chose, obtenir la position de la première vierge après pos1, c'est à dire pos2=.
5. Enregistrez le sous-chaîne entre pos1 et pos2 = au début de la sortie de la phrase; newSentence.
6. Pos1 est maintenant à la première char après le vide.
7. Répétez les 4, 5 et 6 jusqu'à pas d'espace à gauche.
8. Ajouter la dernière sous-chaîne de caractères au début de la newSentence. –