我做了一个简单的程序来查找字符串中的单词,它运行良好,但找不到字符串中的最后一个单词。示例:当我输入“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]);
}
}
}