17

私は現在C++を学んでいます。文字列から空白を削除し、空白のない文字列を返すメソッドをコーディングしようとしています これは私のコードです:

string removeSpaces(string input)
{
  int length = input.length();
  for (int i = 0; i < length; i++) {
     if(input[i] == ' ')
        input.erase(i, 1);
  }
  return input
}

ただし、これにはバグがあり、2 つまたは 3 つの空白が削除されません。これはネットで見つけた

s.erase(remove(s.begin(),s.end(),' '),s.end());

しかし、どうやらこれはiterator(よく理解している場合)を返しているようです。iterator文字列に戻す方法はありますinputか?最も重要なのは、これが正しいアプローチですか?

4

7 に答える 7

25

std::string::eraseイテレータを返しますが、使用する必要はありません。元の文字列が変更されました。

string removeSpaces(string input)
{
  input.erase(std::remove(input.begin(),input.end(),' '),input.end());
  return input;
}
于 2013-05-02T02:23:40.153 に答える
0

このコードは動作するはずです

string removeSpaces(string input)
{
  int length = input.length();
  for (int i = 0; i < length; i++) {
     if(input[i] == ' ')
     {
        input.erase(i, 1);
         length--;
         i--;
     }
  }
  return input
}

理由: 文字列にスペースがあると、文字列の長さが短くなるため、それに応じて変数 "length" を変更する必要があります。

于 2015-10-11T21:22:12.887 に答える