2012-04-17 63 views
3

我正在写一个程序,该程序从用户读取一个字符串并使用它来处理请求。发出提示后,我可以预期的三种可能的响应中的一种中的任一形式:将字符串拆分为多种基本类型

  1. 字符串字符串
  2. 字符串整数

根据哪种类型的命令的用户给出,该方案是做不同的任务。我在尝试处理用户输入时遇到困难。为了清楚起见,用户将输入命令为单个字符串,因此用户执行选项二的示例可能会在提示后输入“年龄8”。在这个例子中,我希望程序将“age”存储为一个字符串,将“8”存储为一个整数。什么是解决这个问题的好方法?

从我在这里收集的信息来看,使用strtok()或boost可能是一个解决方案。然而,我尝试过两次都没有成功,如果有人能够帮助我们做出更清楚的事情,那将会非常有帮助。在此先感谢

+2

类似'string str; int num; cin >> str >> num;'不适合你? – Shahbaz 2012-04-17 15:18:57

+0

我想唯一的问题是如何确定用户是否以字符串或字符串的形式给出输入,而不是字符串整数,如示例中所示。 – 2012-04-17 15:25:12

+0

@Shahbaz:在情况3中不起作用。你想要读一行,然后解析它,或者从'stringstream'中解析。 – 2012-04-17 15:25:50

回答

6

获得一行输入与std::getline后,您可以使用std::istringstream回收文本进一步处理。

// get exactly one line of input 
std::string input_line; 
getline(std::cin, input_line); 

// go back and see what input was 
std::istringstream parse_input(input_line); 

std::string op_token; 
parse_input >> op_token; 

if (op_token == "age") { 
    // conditionally extract and handle the individual pieces 
    int age; 
    parse_input >> age; 
} 
+0

谢谢,非常有帮助。 – 2012-04-17 15:32:10

+0

@JaimieKnox欢迎来到SO!如果这解决了您的问题,请点击此答案旁边左上方的绿色复选标记。 – Potatoswatter 2012-04-17 15:35:56