J'ai ce code pour supprimer WhitSpace dans une ficelle STD :: String et il supprime tous les caractères après l'espace. Donc, si j'ai "ABC def", cela ne renvoie que "ABC". Comment puis-je obtenir de "ABC def Ghi" à "ABCDEFGHI"?
#include<iostream> #include<algorithm> #include<string> int main(int argc, char* argv[]) { std::string input, output; std::getline(std::cin, input); for(int i = 0; i < input.length(); i++) { if(input[i] == ' ') { continue; } else { output += input[i]; } } std::cout << output; std::cin.ignore(); }
5 Réponses :
Le problème est que CIN >> entrée code> ne se lit que jusqu'au premier espace. Utilisez
getline () code> à la place. (Merci, @benjaminlindley!) P>
Vous voulez dire la fonction GetLine Free, car c'est mieux, et entrée code> est un
std :: string code> quand même.
Comme @benjaminlindley mentionné, utilisez Istream & GetLine (Istream & Is, String & Str, Char Delim); Istream & GetLine (Istream & est, String & Str); Code>
Depuis le Ceci, cependant, copierez l'ensemble du fichier (avec Supprimé blancheur). plutôt que juste une ligne. p> p> >> CODE> Opérateur ignore de toute façon, vous pouvez faire quelque chose comme:
Eh bien, le problème réel que vous avez été mentionné par d'autres concernant le Cin >> code>
Mais vous pouvez utiliser le code ci-dessous pour supprimer les espaces blancs de la chaîne:
C'est pour éliminer les espaces de la chaîne en place. Si vous souhaitez une copie sans espaces (comme dans l'OP), vous pouvez utiliser std :: copy_if (entrée.begin (), entrée.end (), std :: Back_inserter (sortie), [] (Char ch) {retour ch! = '';}); code>.
Ma fonction pour supprimer un caractère est appelée "CONV":
#include <cstdlib> #include <iostream> #include <string> using namespace std; string conv(string first, char chr) { string ret,s="x"; for (int i=0;i<first.length();i++) { if (first[i]!=chr) s=s+first[i]; } first=s; first.erase(0,1); ret=first; return ret; } int main() { string two,casper="testestestest"; const char x='t'; cout<<conv(casper,x); system("PAUSE"); return 0; }
Veuillez utiliser l'anglais dans votre code ... C'est pourquoi les mots-clés C ++ sont en anglais, à être compris à l'échelle mondiale ...
@ user2007447 c'était vraiment un vieux
ifstream ifs(filename); string str, output; vector<string> map; while (getline(ifs, str, ' ')) { map.push_back(str); } for(int i=0; i < map.size();i++){ string dataString = map[i]; for(int j=0; j < dataString.length(); j++){ if(isspace(dataString[j])){ continue; } else{ output +=dataString[j]; } } }
Veuillez vous reporter à la question antérieure Stackoverflow.com / Questions / 83439 / ...
Cela utilise des algorithmes stl ou boost. Je veux faire cela "à la main". Avec la façon dont j'ai écrit (si possible).
Notez que l'édition corrige le code de sorte que le problème de la question n'est plus reproductible comme décrit. Ainsi, cette question ne concerne plus l'élimination de l'espace blanc, alors je vote pour fermer.