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

Getting the length of a string after reading from buffer

本文关键字:字符串 获取 缓冲区 读取      更新时间:2023-10-16
string str;
stringstream buffer;
buffer << is.rdbuf();
str = buffer.str();
cout << str.length();
size_t pos = str.find_first_not_of(".123456789");

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

当我运行它时,它只是在我输入"12345"后坐在那里

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

我想

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

因此,您可能需要使用可以处理行的不同输入流读取器。我不太了解 STD lib,但我敢打赌它就在那里。

也许这就是你要找的:

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

我真的不明白你说的不阅读转义序列是什么意思? Getline 将在您键入时读取所有内容。考虑以下示例(混合使用 C 和 C++ 构造时有点难看):

#include <stdio.h>
#include <iostream>
int main() {
        std::string str;
        getline(std::cin,str);
        printf("string length: %ldn",str.length());
        size_t pos = str.find_first_not_of(".123456789");
        printf("first nondigit: %ldn",pos);
        printf("you typed: %sn",str.c_str());
        return 0;
}

如果我运行它并输入

12345nt a

我得到以下输出:

string length: 11
first nondigit: 5
you typed: 12345nt a

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