jjzjj

stringstream

全部标签

c++ - 为什么我不能从字符串复制初始化字符串流?

以下代码在GCC、Clang和VisualStudio中失败:#include#includeintmain(){std::strings="hello";//ok,copy-initializationstd::stringstreamss1(s);//ok,direct-initializationstd::stringstreamss2=s;//error}我认为直接初始化有效而复制初始化无效的唯一情况是构造函数是显式的,在这种情况下不是这样。怎么回事? 最佳答案 该构造函数是标记为显式的,因此只能与直接初始化一起使用。§27

c++ - std::ostringstream 作为函数参数的问题

所以我今天卡在了一个简单的打印函数上,我真的不知道如何解决这个问题。基本上我想将我的字符串传递给std::cout风格的函数,如下所示:foo(std::ostringstream()从我读过的内容来看,应该可以通过一个函数来实现voidfoo(std::ostringstream&in)但是在实现时我得到了一些奇怪的行为:#include#includevoidfoo(std::ostringstream&in){std::cout虽然foo的第一个调用看起来不错并且按预期工作,但第二个调用拒绝编译,即使它们(从我的角度来看)在技术上应该是同一件事。错误:errorC2664:'vo

c++ - istringstream 十进制整数输入为8位类型

这个:#include#include#includeusingnamespacestd;intmain(void){istringstreamiss("12342");int8_tx;while(iss>>x){cout产生:12342但是我想要:12342转换iss>>(int)x(我最初尝试使用char)给我“error:二进制操作数无效表达式('istringstream'(又名'basic_istringstream')和'int')”(clang)或“错误:'operator>>'的模糊重载”(g++)。有没有办法将值作为数字直接读入8位类型,还是我必须使用中间存储?

c++ - 我可以 std::find stringstream 中的字符串吗?

我有一个字符串流,我想对其进行迭代并确定其中是否存在子字符串。我知道我可以转换为字符串并执行std::string::find(),但我只是希望尽可能避免从字符串流到字符串的转换。我知道以下内容不起作用,因为istream_iterator使用char作为其类型(而非字符串)stringstreamssBody;stringsFindThis;...autoitr=std::find(istreambuf_iterator(ssBody),istreambuf_iterator(),sFindThis);但我能否以某种方式在不转换为字符串的情况下使用std::find或类似的方法在st

c++ - 字符串流和二进制数据

为了向/从std::basic_stringstream读取/写入二进制数据,需要什么(某些方法覆盖?)?我正在尝试以下代码,但它并没有像我想象的那样工作:std::basic_stringstreams;uint64_ta=9;s>b;std::cout但我打印了“0”(使用GCC构建)。 最佳答案 如果你想读/写二进制数据,你不能使用或>>,你需要使用std::stringstream::read和std::stringstream::write函数。您还需要使用特化,因为只有char可以安全地别名其他类型。所以你可以这样做:s

c++ - istrstream 的更好替代品?

istrstream非常适合我的需求-基本上,采用固定的字符缓冲区,并给我一个简单的方法来提取行getline()并测试eof()我正在将我们的项目切换到C++17合规性-它已弃用istrsteam-显然是因为有太多C++程序员无法理解固定缓冲区内存管理(你是认真的吗?!)无论如何,istringstream提供相同的使用语义,但它强加了现在在构造时复制整个固定字符缓冲区的需要。这是一个反模式。我正在寻找的是一种使用string_view代替istringstream的string的方法,或者更好的方法stringstream的替代品,它本身处理外部管理的固定缓冲区(它只需要指向它,它

c++ - C++用stringstream将string转int并获取消耗的字符数

我是C++新手(具有C#背景),正在尝试学习如何将字符串转换为int。我通过使用stringstream并将其输出到double来让它工作,如下所示:constchar*inputIndex="5+2";doublenumber=0;stringstreamss(inputIndex);ss>>number;//number=5这很好用。我遇到的问题是我正在解析的字符串以数字开头,但可能在数字后有其他非数字字符(例如“5+2”、“9-(3+2)”等)。stringstream在开头解析数字并在遇到非数字时停止,就像我需要的那样。当我想知道有多少字符被解析为数字时,问题就来了。例如,如果

c++ - 如何让 std::getline 在到达字符串流的末尾时通知我?

假设stringstream包含Jamesis4,我可以写类似getline(stream,stringjames,'')的东西来获取单个单词,但是有没有办法知道我已经到了行尾吗?奖金问题!案例1:James是4案例2:James四岁如果我正在遍历字符串流中的单词,并且我希望收到一个值为4的intval,但我收到的却是一个字符串,检查它的最佳方法是什么? 最佳答案 您检查返回值以查看它的计算结果是真还是假:if(getline(stream,stringjames,''))//dostuffelse//fail至于“奖金问题”,您也

c++ - 为什么我不能按值将右值 std::stringstream 传递给函数?

为什么这段代码不能编译?#includevoidf(std::stringstream){}intmain(){f(std::stringstream{});}我收到这个错误:error:useofdeletedfunction‘std::basic_stringstream::basic_stringstream(conststd::basic_stringstream&)’f(std::stringstream{});^如果我将std::stringstream替换为另一种不可复制的类型,它就可以正常工作。这不应该使用stringstream的move构造函数吗?

c++ - 从字符串读入字符串流

当我尝试从字符串中解析以空格分隔的double值时,我发现了这种奇怪的行为,即字符串以循环方式读出。程序如下:stringstreamss;strings("1234");doublet;listlis;for(intj=0;j!=10;++j){ss>t;lis.push_back(t);}for(autoe:lis){cout这里是输出:1234123412341如果我将尾随空格附加为s="1234";我明白了1234123412现在是问题:1)如果我不知道字符串s中有多少条目,如何将所有条目读入列表l?2)operator我真的在打电话吗ss?是否指定循环读取?3)我能以更好的方