21

C++の学習を始めたばかりです。私はちょうどそれをいじっていて、文字列の単語を単語ごとに入力し、各単語を空白で区切るという問題に遭遇しました。つまり、私が持っていると仮定します

   name  place animal 

入力として。最初の単語を読みたいので、いくつかの操作を行います。次に、2 番目の単語を読み取り、それに対していくつかの操作を実行してから、次の単語を読み取ります。

最初はこのように getline で文字列全体を保存しようとしました

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

しかし、各単語に対して操作を実行し、次の単語に移動するにはどうすればよいでしょうか?

また、多くの場所で見た C++ についてグーグルで調べていると、「名前空間 std を使用する」を使用する代わりに、人々はすべてを「std::」と書くことを好みます。なぜですか?彼らは同じことをしていると思います。では、わざわざ何度も書く必要があるのでしょうか。

4

3 に答える 3

57

行を文字列ストリームに入れ、単語ごとに抽出して戻します。

#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直接読み取ることもできます。

ここでは、なぜusing namespace std悪い習慣と見なされるのかを読むことができます。

于 2013-08-19T16:51:44.023 に答える
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 でこれらの 質問を試してください。

于 2013-08-19T16:58:24.503 に答える