2016-11-21 14 views
0

私の問題の1つは、ユーザーが一連の数字を入力する必要があるということです数字はスペースで区切られ、最後に数字を入力し終わったことを示す文字「e」を入れなければなりません。 'e'を組み込む唯一の方法は、入力文字列を作成し、文字列内のスペースを決定し、その数値をベクトルに配置することによって文字を区切ることです。私はそれをcharで動作させることができましたが、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

あなたのコードにInputData、、などが何であるか把握するのに十分な情報がありません。しかし、私が問題の権利を理解していれば、スペースを区切り文字としてトークン化する必要があります。このような何か動作するはずです:

#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

関連する問題