2013-08-19 4 views
16

私はちょうどC++を学び始めました。私はちょうどその周りを遊んでいて、単語ごとに文字列を入力し、各単語を空白で区切って入力するという問題を見つけました。私が意味することは、入力として私が持っていると仮定すると、私は文字列を単語で入力する

name place animal 

を入力します。私は最初の言葉を読んで、その上でいくつかの操作をしたい。次に、2番目の単語を読んで、その上でいくつかの操作を行い、次の単語を読みます。

私はこの

#include<iostream> 
    using namespace std; 
    int main() 
    { 
    string t; 
    getline(cin,t); 
    cout << t; //just to confirm the input is read correctly 
    } 

などのgetlineのと最初の文字列全体を格納しようとした。しかし、その後、どのように私は各単語に対して操作を実行すると、次の単語に移動しますか?

また、私は多くの場所で見ていましたが、 "namespace stdを使う"の代わりに "std ::"と書くのが好きです。 それはなぜですか?私は彼らが同じことをすると思います。それで何度も何度もそれを書いてしまうのはなぜですか?

+0

[なぜ悪い習慣と考え、「名前空間stdを使用して」される?](http://stackoverflow.com/q/1452721/995714) –

答えて

44

バックワードによってにstringstreamと抽出単語にラインを入れて:もちろん

#include <iostream> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    string t; 
    getline(cin,t); 

    istringstream iss(t); 
    string word; 
    while(iss >> word) { 
     /* do stuff with word */ 
    } 
} 

を、あなただけのgetlineの部分をスキップし、直接cinから単語によって単語を読むことができます。

そして、ここで、あなたはwhy is using namespace std considered bad practice.

+0

私はCINで読んでみました。しかし、単語は空白で区切られているので、cinは最初の単語だけを読むように見えました。シンプルな シング; cout t; はそれを示しています。そこで私はgetl​​ineに切り替えました。 – aandis

+2

@zack whileループは "問題"を解決しました – sehe

+0

@jrokは与えたコードにコンパイルエラーがあります。 エラー:変数 'std :: istringstream iss'にイニシャライザがありますが、不完全な型です – aandis

1

のgetlineはあなたが望むものではありませんこれは、一度に行全体を記憶している読むことができます。簡単な修正は、3つの変数を持ち、それらをすべて得るためにcinを使うことです。 C++はスペースで自動的に解析します。

#include <iostream> 
using namespace std; 

int main() { 
    string a, b, c; 
    cin >> a >> b >> c; 
    //now you have your three words 
    return 0; 
} 

私は、文字列とインデックスをよく読んで、特定の「操作」は、あなたが話しているので、私はそこにあなたを助けることはできませんが、それは文字を変更するかどうか分かりません。 C++のドキュメントは素晴らしいです。名前空間stdを使用する場合。 std ::と他のライブラリとの間には、既に多くのことが言われています。 StackOverflowでthesequestionsを試してみてください。

+0

文字列内の単語数が不明です。それでは、cinで単語を読む方法は? – aandis

+0

http://stackoverflow.com/questions/8683302/how-to-split-a-space-separated-string-into-multiple-strings-in-c –

+0

getlineで文字を区切り、http:///www.minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm –

3

(これは参照することが他人の利益のためである)

あなたは、単にCIN文字配列を使用することができます。 cin入力は最初に見つかる空白で区切られます。

#include<iostream> 
using namespace std; 

main() 
{ 
    char word[50]; 
    cin>>word; 
    while(word){ 
     //Do stuff with word[] 
     cin>>word; 
    } 
} 
関連する問題