2017-01-25 10 views
1

stringstreamを使用して、文章から単語を抽出します。std :: coutが出力に改行または改行を追加するのはなぜですか?

単語ごとに改行が追加されていますが、その理由はわかりません。あなたはできる?あなたの助けにThx。 Keith:^)

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

int main() { 
    int wordCount(9); 
    std::vector<std::string> v(wordCount); 
    std::vector<std::string>::iterator it; 
    std::string tStr; 
    std::string myStr = "the quick fox jumped over the lazy brown dogs"; 
    std::stringstream ss(myStr); 
    std::cout << "Sentence broken into vector:" << std::endl; 
    for (int i=0; i<wordCount; ++i) { 
     ss >> tStr; 
     v.push_back(tStr); 
    } 
    for (it=v.begin(); it != v.end(); ++it) 
     std::cout << *it << std::endl; 

    std::cout << std::endl; 
    return 0; 
} 

コンパイル、実行、および出力。余分な改行に注意してください。あなたはwordCount空のエントリを作成しstd::vector<std::string> v(wordCount);あなたはこの行を使用してベクトルを作成し

pickledEgg $ g++ -std=c++11 -g -Og -o io2 io2.cpp 
pickledEgg $ ./io2 
Sentence broken into vector: 









the 
quick 
fox 
jumped 
over 
the 
lazy 
brown 
dogs 
+3

これは、デバッガを使用するのに最適なタイミングです。 – chris

+0

あなたはそのコードのどこでも 'std :: cin'を使用していません... – qxz

+1

9つの空文字列でベクトルを作成し、最後に他の文字列をプッシュしました...出力は正確に一致します –

答えて

6

push_backにあなたの言葉を追加すると、あなたはあなたの言葉をあなたのベクトルの最後に追加しました。あなたがあなたのベクトルを反復したときには、最初に、新しい行で空の項目を印刷し、次に良いデータを印刷しました。

+0

はい!ありがとうございました。良い目;長い一日。 – kmiklas

+0

@kmiklas別の質問のために私の記憶の中で新鮮だった、そうでなければ私はおそらくそれを逃したでしょう。 –

4

かなりシンプル:

//std::vector<std::string> v(wordCount); 
std::vector<std::string> v; 

は、私はあなたがstd::vector::reserveを使用したいと思います。

要素は、要素が反復子を介してのみならず アクセスだけでなく、要素に正規 ポインタにオフセットを使用することができることを意味し、連続的に格納されます。つまり、 ベクトルの要素へのポインタは、配列の 要素へのポインタを期待する関数に渡すことができます。 http://en.cppreference.com/w/cpp/container/vector

std::vector::push_backは、それの大きさの変化を引き起こす、ベクターに値を追加しますので。十分な大きさのベクトルを扱う場合は、std::vector::reserveの使用を検討する必要があります。

の違いがわかります。

+1

それは遅すぎました;) – 0Tech

+0

あなたは答えを拡大し、何が起こっているのかを正確に説明することができます。 – vsoftco

関連する問題