0

スペースを含む文字列を取得し、スペースを含まない文字列を返す関数を作成しようとしました。

例えば:

str = "   a  f  ";

「af」に置き換えられます。

私の関数は機能しません。文字列を「af f」に置き換えました。

これは私の機能です:

void remove_space(string& str) {
    int len = str.length();
    int j = 0, i = 0;
    while (i < len) {
        while (str.at(i) == ' ') i++;
        str.at(j) = str.at(i);
        i++;
        j++;
    }
}

int main ()
{
string str;
    getline(cin, str);
    remove_space(str);
    cout << str << endl;
return 0;
}

どんな助けでも大歓迎です!

4

5 に答える 5

2

Boostを使用できる場合は、次のことができます。

#include<boost/algorithm/string.hpp>
...
erase_all(str, " ");

それ以外の場合は、次の代替案をお勧めします。

#include<cctype>
#include<algorithm>
...
str.erase(std::remove (str.begin(), str.end(), ' '), str.end());
于 2013-04-21T17:40:02.757 に答える
1
#include<cctype>
#include<algorithm>

bool my_isspace(char c) {
    return std::isspace(c);
}

str.erase(remove_if(str.begin(), str.end(), my_isspace), str.end());

仕事をするべきです。


あなたの機能について

void remove_spaces(string& str)
{
    int len = str.length();
    int j = 0, i = 0;

    while (j < len) 
    {
        if (str.at(i) == ' ') {
          ++j;
        }
        str.at(i) = str.at(j);
        ++i;
        ++j;
    }


    // You are missing this
    str.erase(i,len);
}
于 2013-04-21T17:31:54.873 に答える
1

独自のソリューションを実装するのではなく、実証済みのerase remove イディオムを使用できます。

#include <string>
#include <algorithm>
#include <iostream>

int main()
{
  std::string s("a b c d e f g");
  std::cout << s << "\n";
  const char_to_remove = ' ';
  s.erase(std::remove(s.begin(), s.end(), char_to_remove), s.end() );
  std::cout << s << "\n";
}
于 2013-04-21T17:33:08.130 に答える
1

処理後に文字列のサイズを変更する必要があります。remove_space例:の末尾に行を追加します。

str.resize(j);
于 2013-04-21T17:34:13.273 に答える