从缓冲区读取后获取字符串的长度

时间:2012-07-04 04:35:23

标签: c++ string stl

string str;
stringstream buffer;

buffer << is.rdbuf();

str = buffer.str();

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

有人可以向我解释为什么这段代码不起作用?

当我运行它时,它只是在我输入“12345”之后就坐在那里

到底是怎么回事?!我对字符串流不太熟悉,但为什么不这样,以及其他看似平凡的操作按预期工作?

4 个答案:

答案 0 :(得分:2)

我猜你需要关闭流,即Ctrl + D或其他东西 请记住,对于流,换行符只是另一个(两个)字符。

所以你可能需要使用不同的输入流阅读器来处理行。 我不太了解STD lib,但我打赌它在那里。

答案 1 :(得分:1)

也许这就是你要找的东西:

string str;
getline(is,str);
cout << str.length();
size_t pos = str.find_first_not_of(".123456789");

答案 2 :(得分: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

答案 3 :(得分:0)

cin等待输入分隔符。输入完字符串后按Enter键。