C ++检查特定的输入数量

时间:2014-11-26 07:30:22

标签: c++ string input

我有一个提示用户输入的功能。如果他们输入的内容超过我想要的单词数(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个字符串怎么办?谢谢

2 个答案:

答案 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/