2017-02-06 6 views
0

ユーザーはカンマで区切られた数字のペアのリストを入力します。 例... 1, 1 4, 67 90, 87 OR:コンマで区切られた数字のペアから2つのベクトルを取り込む方法C++

30, 50 

560, 70 

90, 40 

私はこれらの数字と2つのベクトルを移入する必要があります。各ペアの最初のものは最初のベクトルに入り、各ペアの2番目の番号は2番目のベクトルに入ります。

私はベクトルで読み方を知っているとどのように1アウトを印刷するには...

vector<int> v; 
int i; 
while (cin >> i) 
{ 
    v.push_back(i); 
} 
// print out the vector 
for (auto x : v) 
{ 
    cout << x << ", "; 
} 

が、私はあなたがこれをどのように操作を行う場合は2つのベクトル

+1

数字はコンマで入力する必要がありますか?このような厄介な合併症。なぜ空きスペースではないのですか? – DeiDei

+0

はええ、彼らが無効な入力を処理コンマ – Joe

+0

を持っている必要があり種類の厄介なことが、多分あります:最初のベクターに最初の値を読んで、あなたはカンマを見つけるまで、文字を読み、第二のベクターに第2の値を読み、そして繰り返します。 –

答えて

0

を移入するかどうかはわかりませんか?

vector<int> v; //vector 1 
vector<int> vv; //vector 2 
int i;int j; 
while (cin >> i) 
{ 
    v.push_back(i); 
    cin >> j; 
    vv.push_back(j); 
} 
// print out the first vector 
for (auto x : v) 
{ 
    cout << x << ", "; 
} 

// print out the second vector 
for (auto y : vv) 
{ 
    cout << y << " "; 
} 
+0

は正しい軌道上にあるかもしれないが動作していない可能性があります。私は入力のコンマとスペースも考慮する必要があると思う。 – Joe

+0

あなたは入力と出力のフォーマットの例を提供することができますか? – Knight

0

以下のコードを使用して作成しました。このコードでは、ユーザーの入力が希望の形式(number1、(space)number2)であると想定し、単語 "over"が与えられたときに読み込みを停止します。すべての行の番号1はv1という名前のベクトルに格納され、すべての行の番号2はv2という名前のベクトルに格納されます。この中で

std::istream &operator>>(std::istream &is, char const *delim) { 

    while (isspace((unsigned char)*delim)) 
     ++delim; 

    while (isspace((unsigned char)is.peek())) 
     is.ignore(1); 

    while (*delim == is.peek()) { 
     ++delim; 
     is.ignore(1); 
    } 

    if ('\0' != *delim) 
     is.setstate(std::ios::failbit); 

    return is; 
} 

int main() 
{ 
    vector<string> v; 
    vector<int> v1; 
    vector<int> v2; 
    string inp; 
    do 
    { 
     cin >> inp; 
     v.push_back(inp); 
    } 
    while (inp.compare("over") !=0); 

    for (int i=0; i<v.size(); i++) 
    { 
     if (v[i].compare("over") != 0){ 
      if (i%2==0){ 
       v1.push_back(atoi(v[i].c_str())); 
      } else { 
       v2.push_back(atoi(v[i].c_str())); 
      } 
     } 
    } 

    cout << "v1" << endl; 
    for (int i=0; i<v1.size(); i++) 
    { 
     cout << v1[i] << endl; 
    } 

    cout << "v1" << endl; 
    for (int i=0; i<v2.size(); i++) 
    { 
     cout << v2[i] << endl; 
    } 

    return 0; 
} 
0

私はこのようなことをしなければならなかったら、私は通常、読み、確認します(それ以外は無視する)には少し抽出演算子を始めました区切り文字

std::vector<int> u; 
std::vector<int> v; 

int a, b; 
while (is >> a >> "," >> b) { 
    u.push_back(a); 
    v.push_back(b); 
} 

私がすぐに気づくのは、読んでいる2つの値の関係を検討することです。それらが密接に関連している場合は、両方を保持する構造を作成し、それらの構造のベクトルを作成する方が良い場合があります(上に示したような構造タイプのオーバーロードがoperator>>)。

関連する問題