8
votes

C ++ Supprimer WhitSpace

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();
}


3 commentaires

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.


5 Réponses :


9
votes

Le problème est que CIN >> entrée ne se lit que jusqu'au premier espace. Utilisez getline () à la place. (Merci, @benjaminlindley!)


2 commentaires

Vous voulez dire la fonction GetLine Free, car c'est mieux, et entrée est un std :: string quand même.


Comme @benjaminlindley mentionné, utilisez Istream & GetLine (Istream & Is, String & Str, Char Delim); Istream & GetLine (Istream & est, String & Str);



3
votes

Depuis le >> Opérateur ignore de toute façon, vous pouvez faire quelque chose comme: xxx

Ceci, cependant, copierez l'ensemble du fichier (avec Supprimé blancheur). plutôt que juste une ligne.


0 commentaires

9
votes

Eh bien, le problème réel que vous avez été mentionné par d'autres concernant le Cin >> Mais vous pouvez utiliser le code ci-dessous pour supprimer les espaces blancs de la chaîne: xxx


1 commentaires

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! = '';}); .



1
votes

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;
}


2 commentaires

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



-1
votes
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];
        }
    }
}

0 commentaires