0
string str;
stringstream buffer;

buffer << is.rdbuf();

str = buffer.str();

cout << str.length();
size_t pos = str.find_first_not_of(".123456789");

このコードが機能しない理由を誰かに説明してもらえますか?

実行すると、「12345」と入力した後、そこに座っています

一体何が起こっているのですか?私は文字列ストリームにはあまり詳しくありませんが、なぜこれや、一見平凡な操作が期待どおりに機能しないのでしょうか?

4

4 に答える 4

2

ストリームを閉じる必要があると思います。つまり、Ctrl+Dか何かです。
ストリームの場合、改行は単なる別の(2つの)文字であることを忘れないでください。

したがって、おそらく、行を処理できる別の入力ストリームリーダーを使用する必要があります。私はSTDlibをよく知りませんが、そこにあるに違いありません。

于 2012-07-04T04:37:51.110 に答える
1

多分これはあなたが探しているものです:

string str;
getline(is,str);
cout << str.length();
size_t pos = str.find_first_not_of(".123456789");
于 2012-07-04T05:02:12.487 に答える
0

エスケープシーケンスを読まないというのはどういう意味かよくわかりませんか?getlineは、入力時にすべてを読み取ります。次の例を考えてみましょう(CとC ++の構成を組み合わせると少し醜いです):

#include <stdio.h>
#include <iostream>

int main() {
        std::string str;
        getline(std::cin,str);
        printf("string length: %ld\n",str.length());
        size_t pos = str.find_first_not_of(".123456789");
        printf("first nondigit: %ld\n",pos);
        printf("you typed: %s\n",str.c_str());
        return 0;
}

実行して入力すると

12345\n\t a

次の出力が得られます。

string length: 11
first nondigit: 5
you typed: 12345\n\t a
于 2012-07-04T06:23:28.693 に答える
0

cin は区切り文字が入力されるのを待ちます。文字列の入力が終了したら、Enter キーを押します。

于 2012-07-04T11:53:10.267 に答える