c++ - 我的功能没有在字符串中找到我的单词

我做了一个简单的程序来查找字符串中的单词,它运行良好,但找不到字符串中的最后一个单词。示例:当我输入“Hello world”时,它只会回退“Hello”。

#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
vector<char> Buffer2;
string temp;
vector<string> FinalString;
string UserInput;

void SeperateString() {
  for (int x = 0; x < UserInput.size(); x++) {
    temp.clear();
    if (UserInput[x] == ' ') {
      for (int x = 0; x < Buffer2.size(); x++) {
        temp = temp + Buffer2[x];
      }
      FinalString.push_back(temp);
      Buffer2.clear();
    } else {
      Buffer2.push_back(UserInput[x]);
    }
  }
}
int main() {
  getline(cin, UserInput);

  SeperateString();
  for (int x = 0; x < FinalString.size(); x++) {
    cout << FinalString[x] << endl;
  }
}

回答1

对于您的代码,这可能是一个更好的实现:

void SeperateString() {

    istringstream ss(UserInput); // needs #include <sstream>
    while (ss >> temp)
    {
        FinalString.push_back(temp);
    }
}

https://www.cplusplus.com/reference/sstream/istringstream/istringstream/https://www.cplusplus.com/reference/sstream/stringstream/stringstream/

如果你想坚持你的代码,在循环结束时,只需检查 Buffer2 是否有字符:

for (int x = 0; x < UserInput.size(); x++) {
    temp.clear();
    if (UserInput[x] == ' ') {
        for (int x = 0; x < Buffer2.size(); x++) {
            temp = temp + Buffer2[x];
        }
        FinalString.push_back(temp);
        Buffer2.clear();
    }
    else {
        Buffer2.push_back(UserInput[x]);
    }
}

if (Buffer2.size() > 0)
{
    temp.clear();
    for (int x = 0; x < Buffer2.size(); x++) {
        temp = temp + Buffer2[x];
    }
    FinalString.push_back(temp);
}

回答2

您需要单独处理最后一个单词,因为它后面没有空格。

void SeperateString() {
for (int x = 0; x <= UserInput.size(); x++) {
    temp.clear();
    if (UserInput[x] == ' ' || x == UserInput.size()) {
        for (int y = 0; y < Buffer2.size(); y++) {
            temp = temp + Buffer2[y];
        }
        FinalString.push_back(temp);
        Buffer2.clear();
    }
    else {
        Buffer2.push_back(UserInput[x]);
    }
   }
}

相似文章