2016-11-21 332 views
0

所以我的程序中有一個問題是我需要用戶輸入一系列數字(數量取決於它們)號碼以空格隔開,最後必須輸入字母'e'來表示他們已完成輸入數字。將'e'合併到其中的唯一方法是通過確定字符串中的空格並將所述數字放入一個向量中來製作輸入字符串並分隔字符。我設法得到它與一個字符工作,但它然後使任何數字他們輸入1位數字。(C++)在由空格分隔的字符串中分隔數字

Check = true; 
cout << "Please enter data (0 - 25) with spaces followed by the letter 'e'.\n"; 
bool Error = false; 
VectorSize = 0; 
Data.resize(VectorSize); 
int i = 0; 
while (Error == false) 
{ 
    cin >> CTemp; 
    switch (CTemp) 
    { 
    case 'e': 
     if (VectorSize != 0) 
     { 
      Error = true; 
      break; 
     } 
     else 
     { 
      cout << "Please enter at least one value before 'e'"; 
      Check = false; 
      break; 
     } 
    default: 
     Temp = CTemp - 48; 
     cout << Temp << endl; 
     VectorSize++; 
     Data.resize(VectorSize); 
     if ((Temp > 25) || (Temp < 0)) 
     { 
      Data[i].InputData(rand() % 26); 
     } 
     else 
     { 
      Data[i].InputData(Temp); 
     } 
     i++; 
    } 
} 
return Check; 

上面的代碼是使用char的版本。我需要幫助實現字符串。

+0

如果你可以使用'CString',它的'Tokenize'函數對你很有用。我沒有看到結尾'e'的任何用處。 – sergiol

回答

0

沒有足夠的信息來找出代碼中的InputDataVectorSize等等。但是,如果我理解正確的問題,則需要使用空格作爲分隔符進行標記。像這樣的東西應該工作:

#include <iostream> 
#include <vector> 
#include <sstream> 
#include <string> 
using namespace std; 

int main() 
{ 
    vector<string> vec; 
    stringstream st("1 3 5 12 48 38 38 94 e"); 
    string temp; 

    while(st >> temp) 
     vec.push_back(temp); 

    vec.pop_back(); //remove the 'e' 

    for(auto s:vec) 
     cout<<s<<endl; 

    return 0; 
} 

注意,這個代碼不驗證輸入(例如,我們不知道,如果最後一個條目,其實是「E」)。

+0

好吧,這是朝着正確方向邁出的一大步。我如何讓用戶選擇ss串流中的字符串,以及如何將每個輸出轉換爲int。 – Alex

+0

@Alex到目前爲止你有什麼嘗試? –

+0

@ Vada Poche我已經設法將數字轉換爲int,所以這不再是一個問題。我仍然無法知道如何讓用戶輸入數字(即在字符串流中創建的數字) – Alex