C ++ удалить пробелы - PullRequest
       32

C ++ удалить пробелы

7 голосов
/ 06 декабря 2011

У меня есть этот код для удаления пробелов в std :: string, и он удаляет все символы после пробела. Поэтому, если у меня есть «abc def», он возвращает только «abc». Как заставить его перейти от "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 ]

9 голосов
/ 06 декабря 2011

Проблема в том, что cin >> input читает только до первого пробела.Вместо этого используйте getline().(Спасибо, Бенджамин Линдли!)

8 голосов
/ 07 декабря 2011

Что ж, реальная проблема, о которой вы упоминали, была упомянута другими в отношении cin >> Но вы можете использовать приведенный ниже код для удаления пробелов из строки:

str.erase(remove(str.begin(),str.end(),' '),str.end());
2 голосов
/ 06 декабря 2011

Так как оператор >> пропускает пробелы в любом случае, вы можете сделать что-то вроде:

while (std::cin>>input)
    std::cout << input;

Это, однако, скопирует весь файл (с удаленными пробелами), а не одну строку.

1 голос
/ 03 марта 2013

Моя функция удаления символа называется "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;
}

Вам нужно изменить const char x на ' ' (пробел, бланко) для выполнения работы. Надеюсь, это поможет.

0 голосов
/ 19 января 2018
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];
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...