我有一个提示用户输入的功能。如果他们输入的内容超过我想要的单词数(3),则应打印错误。我该如何处理?我发现了如何检查输入是否是< 3,但不是> 3.
struct Info
{
std::string cmd;
std::string name;
std::string location;
}
Info* get_string()
{
std::string raw_input;
std::getline(std::cin, raw_input);
std::istringstream input(raw_input);
std::string cmd;
std::string name;
std::string location;
input>>cmd;
input>>name;
input>>location;
Info* inputs = new Info{cmd, name, location};
return inputs;
}
我自动获取3个字符串的函数并将它们存储在我的结构中,稍后我会检查结构的任何部分是否为空(例如:"运行"" Joe&# 34;""),但如果他们输入4个字符串怎么办?谢谢
答案 0 :(得分:0)
您可以将输入字符串拆分为带空格分隔符的单词,然后检查单词数。您可以使用下面的功能来分割您的输入。在此之后,您可以检查向量的大小。
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
vector<std::string> split(const string &s, char delim) {
stringstream ss(s);
string item;
vector<string> res;
while (getline(ss, item, delim)) {
if(item.length()==0)continue;
res.push_back(item);
}
return res;
}
int _tmain(int argc, _TCHAR* argv[])
{
string theString;
cin>>theString;
vector<string> res=split(theString, ' ');
if(res.size()>3)
{
//show error
}
return 0;
}
答案 1 :(得分:0)
这个问题以及费迪南德的想法是,为了测试是否存在第4个字符串,你必须&#34;问&#34;为了它。如果它存在,你可能会出错,但如果它没有,那么它就在那里等待输入,用户想知道出了什么问题。
因此,我将略微修改您的代码。它相当直接。如果用户在最后一个单词&#34;中输入一个空格,那么您就知道存在问题,可以按照您的意愿处理。
// Replace input >> location; with the below
// Get until the line break, including spaces
getline(input, location);
// Check if there is a space (I.e. 2+ words)
if(location.find(" ") != string::npos){
// If so, fail
}
学习资源:
http://www.cplusplus.com/reference/string/string/find/
http://www.cplusplus.com/reference/string/string/getline/