2012-04-17 44 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