2011-07-26 17 views
1

私は、ユーザからの入力行をベクトルで文字列に分割し、一度に1つずつ(8行に1つずつ)印刷するようなものを作成しようとしています。 これまでのところ、これは私が持っているものです。私はそれが一度に8を印刷するには取得にこ​​だわっているベクトルとfor/whileループに関する初心者

#include <iostream> 
#include <vector> 
#include <string> 
#include <sstream> 

int main(void) 
{ 
    using namespace std; 

    vector<string> svec1; 
    string temp; 
    while(getline(cin, temp)) //stores lines of text in temp 
    { 
     if(temp.empty()) //checks if temp is empty, exits loop if so. 
      break; 
     stringstream ss(temp); 
     string word; 
     while(ss >> word) //takes each word and stores it in a slot on the vector svec1 
     { 
      svec1.push_back(word); 
     }    
    }   
} 

、私が試したソリューションは、距離誤差のうちの添字を取得しておきます。このような

+3

、我々はできるように、印刷ソリューションを追加してください添字の誤りを手伝ってください。 – nathan

+0

一度に8枚印刷しますか? – Leon

+3

このショートスニペットはここにインラインで置かれているので、キャスト貼り付け時に問題が有効になるように注意してください(注:既にそれを行いました) –

答えて

2

何か:

for(int i = 0; i < svec1.size(); i++) 
{ 
    cout << svec1[i]; 
    if ((i+1) % 8 == 0) 
     cout << endl; 
    else 
     cout << " "; 
} 

EDIT:
上記の解決策は最後に余分なスペース/改行を出力します。

for(int i = 0; i < svec1.size(); i++) 
{ 
    if (i == 0) 
     /*do nothing or output something at the beginning*/; 
    else if (i % 8 == 0) 
     cout << endl; /*separator between lines*/ 
    else 
     cout << " "; /*separator between words in line*/ 
    cout << svec1[i]; 
} 
+0

facebookスタイルに直接返信する方法がわからない nathan:とにかくそれは恐ろしい混乱だった。 leon:本からのC++の学習は、演習の1つでした> phresnel:ありがとう、今後これを念頭に置いておきます。 @Vlad私はこれを試してみます。ありがとうございました – user863492

+0

@ user863492:コメントの下にある "コメントを追加"リンクを使って質問に答えてください。 – Vlad

+0

@ user863492:ようこそ! – Vlad

-1

通常は、forループ句を使用してベクトルを反復処理:それはこのような何かによって回避することができます。だから、あなたは、すべての要素を印刷したい場合は、あなたのvector<string>あなたはこのような何かを行う必要があります。

for(vector<string>::iterator it = myvec.begin(); it != myvec.end(); ++it) { 
    cout << *it; 
} 

EDIT:ヴラドとしてあなたはまた、リストにはあまり効率的である配列のインデックスを使用することができ、正確に掲載しています、ベクトルでも同様に効率的です。インデックスを使用してベクトルを超える

+0

-1:これは、OPが尋ねたことをしません。 –

0

ウォーク:

for (unsigned int idx = 0; idx < svec1.size(); ++idx) { 
    std::cout << svec[idx] << sep(idx); // sep(idx) is conceptual; described below 
} 

このsep(idx)は何ですか? idx thという語の後に印刷する区切り文字です。これは、

  • 8行を1行に印刷した後の改行です。 idxは7、15、23などとなります:8の整数倍の1 shy。コードでは、(idx+1)%8 == 0です。
  • ベクトルの最後の項目の改行。おそらく、最後の項目の後に改行が必要です。コードidx+1 == svec.size()
  • そうでなければスペース。

これを行う簡単な方法は、三項演算子である:

for (unsigned int idx = 0; idx < svec1.size(); ++idx) { 
    const char * sep = (((idx+1)%8 == 0) || (idx+1 == svec.size())) ? "\n" : " "; 
    std::cout << svec[idx] << sep; 
} 

あなたがそのようにしないと、

for (unsigned int idx = 0; idx < svec1.size(); ++idx) { 
    const char * sep; 
    if (((idx+1)%8 == 0) || (idx+1 == svec.size())) { 
     sep = "\n"; 
    } 
    else { 
     sep = " "; 
    } 
    std::cout << svec[idx] << sep; 
}