2017-11-13 39 views
-1

whileループを理解するのに役立ちますか?例えば、ユーザーからの入力を受け取ります。1 2 3 8(入力サイズが指定されていません)と1つの値(任意のインデックス)が配列のサイズを表示します。配列の最大値を出力しています。ここでは答えは8です。文字列をC++で整数の配列に変換する

#include<bits/stdc++.h> 
#define ll long long 
using namespace std; 
int main() 
{ 
    int t; 
    cin >> t; 
    while(t--) 
    { 
     string x; 
     getline(cin, x); 
     ll p; 
     istringstream iss(x);// use of this function 
     vector<ll> v; 
     ll ans; 
     while(iss>>p)// what this loop do 
     { 
      v.push_back(p); 
     } 
     ll size=v.size()-1; 
     sort(v.begin(), v.end()); 
     if(size==v[size]) 
     { 
      ans=v[size-1]; 
     } 
     else 
     { 
      ans=v[size]; 
     } 
     cout<<ans<<"\n"; 
    } 
    return 0; 
} 
+0

私の友人そのためのより良い説明が見ているhttps://stackoverflow.com/questions/7663709/convert-string-to-int-c – joeydash

+0

あなたはCINから1つの文字を無視すべきです、文字列を正しく入力することができます。 cin.ignore()を使用します。後のcin >> t; :) –

答えて

0

istringstream iss(x)は、文字列xからなるissという文字列ストリームを作成します。 iss >> pは、issストリームから次の要素を抽出し、pに挿入します。変数pはint型であるため、戻り値はintです。

while(iss>>p)   // get an int value from string stream iss 
{ 
    v.push_back(p); // push the int value to the vector 
} 

cinの後にcin.ignore()を使用する必要があります。それ以外の場合、次のgetline関数は改行文字のみを取ります。このように:

cin >> t; 
cin.ignore(); 
+0

文字列ストリームはスペースではなくint値のみをとりますか? – POSI2

+0

はいこれは空白を取りますが、cinを使用した後でも、改行文字を無視しなければなりません。 check:https://stackoverflow.com/questions/12691316/getline-does-not-work-if-used-after-some-inputs –

+0

文字列に "1 2 3 4"を指定すると、istringstreamは1,2を返します。 、3と4それぞれのループ反復 –

関連する問題