J'essaie d'écrire quelque chose qui remplacera tous les espaces d'une chaîne avec un soulignement.
Ce que j'ai jusqu'à présent. P>
string word; cin >> word; word = space2underscore(word); cout << word;
5 Réponses :
Le problème est avec votre compréhension de Ce que vous voulez plutôt utiliser std :: Cin Code> dans la bibliothèque code> iOSTream code>: Utilisation de l'opérateur
>> code> sur un flux avec un flux
STD :: String Code> Comme l'argument à droite ne prend qu'un mot à la fois (à l'aide de WhitSpace pour séparer). P>
std :: getline () code >
pour obtenir votre chaîne. p>
Le problème est que Par exemple: P> CIN >> Word code> ne va lire que dans le premier mot. Si vous souhaitez exploiter un tout comme à la fois, vous devez utiliser
std :: GetLine code>
. std::string s = "hello stackoverflow";
std::transform(s.begin(), s.end(), s.begin(), [](char ch) {
return ch == ' ' ? '_' : ch;
});
std::cout << s << std::endl;
Désolé d'être pédants, mais vous mélangez si vous utilisez ou non std :: code> ou non. (Bien que techniquement, votre code fonctionne avec
à l'aide de std :: cout; code> en haut)
@Platinum Azure: Vous avez raison, personnellement, j'aime utiliser un std :: code> mais j'ai copié une partie du code de l'OP dans mon exemple. Je vais nettoyer ça.
Merci Monsieur! Mon programme court maintenant :)
J'aime vraiment, vraiment comme Lambdas, mais dans ce cas std :: remplacer code> peut être un meilleur ajustement.
@BlastFurnace: Je dois être honnête, j'ai complètement oublié std :: remplacer code>, bon appel!
@Évan Teran: Chaque fois que je me trouve en train d'écrire encore un autre pour code> boucle, j'aime vérifier la bibliothèque standard. Il y a généralement quelque chose qui est correct, rapide, et avec un nom plus significatif que
pour code> ou
pendant code>. Le moins de code que je dois écrire signifie aussi moins de bogues.
remplacer avec p>
Vous avez votre getline code> problème résolu mais je voulais juste dire que la bibliothèque standard contient beaucoup de fonctions utiles. Au lieu d'une boucle laminée à la main, vous pourriez faire:
std::string space2underscore(std::string text)
{
std::replace(text.begin(), text.end(), ' ', '_');
return text;
}
N'oubliez pas de mentionner que cela nécessite
Pour une approche moderne C ++ 1x Vous avez la possibilité de STD :: Regex_replace .
#include <regex> #include <string> #include <cstdlib> #include <iostream> using std::cout; using std::endl; using std::regex; using std::string; using std::regex_replace; int main( const int, const char** ) { const auto target = regex{ " " }; const auto replacement = string{ "_" }; const auto value = string{ "hello stackoverflow" }; cout << regex_replace( value, target, replacement ) << endl; return EXIT_SUCCESS; }