草庐IT

istringstream

全部标签

C++ - 重复使用 istringstream

我有一个代码,用于读取行中存储有float的文件,如下所示:“3.34|2.3409|1.0001|...|1.1|”。我想使用istringstream阅读它们,但它并不像我期望的那样工作:stringrow;stringstrNum;istringstreamseparate;//textovystreamprokonverziwhile(getline(file,row)){separate.str(row);//=HEREisPROBLEM=while(getline(separate,strNum,'|')){//usingdelimiterflNum=strToFl(str

c++ - 在没有 move 构造函数的情况下返回不可复制对象的解决方法

在我的API中,我有一个返回std::istringstream的函数.std::istringstreamclass是不可复制的,但支持move,因此在符合标准的编译器上返回本地没有问题std::istringstream.但是,在gcc4.9上,有nosupportmovestd::istringstream.有没有我可以使用的解决方法std::istringstream无需从用户的角度更改API?建议的解决方法here,使用unique_ptr将改变API的语义。 最佳答案 如果你不能movestd::istringstrea

c++ - 读取文件内容时未定义的字符,文件末尾没有新行

要解析的文件(settings.txt):FULLSCREEN=OnV_SYNC=On[no"\n"attheendoffile]如果没有ENTER"\n"输出是:MapKey=FULLSCREENMapValue=OnMapKey=V_SYNCMapValue=Onřřřř在文件末尾使用ENTER"\n"是正确的(没有"řřřř"):MapKey=FULLSCREENMapValue=OnMapKey=V_SYNCMapValue=On如何在不在文件末尾添加新行的情况下更改程序运行?代码:#include#include#include#include#include#include

c++ - 如何阻止读取 C++ stringstream 以等待数据

所以,我一直在努力弄清楚,如何等待来自C++stringstream的数据(例如),而不是不断地检查数据是否存在,这非常消耗CPU。例如,我完全能够从串行设备读取数据,并在没有数据到达时锁定进程,但不幸的是,我还不知道如何使用C++流来做到这一点。我确定我遗漏了什么,因为cin正是这样做的,即等待返回键从istream读取中退出,但它是如何做到的?在此先感谢您对这个主题的任何了解。 最佳答案 Streams从std::streambuf获取数据。对于std::cin,它调用系统的read()函数(或等效函数),该函数会阻塞,直到数据

c++ - 来自 std::string 的 std::istringstream 而无需复制

我一直在用这个:ifstreamin("file.txt")stringline;getline(in,line);istringstreamiss(line);...进行一些简单的解析。我想避免不必要的复制以提高性能,所以我尝试了:ifstreamin("huge_line.txt");stringline;getline(in,line);istringstreamss;ss.rdbuf()->pubsetbuf(const_cast(line.c_str()),line.size());...它似乎可以完成这项工作(即显着提高性能)。我的问题是,给定const_cast这样安全吗

c++ - 为什么在成功将 bool 字符串值转换为 bool 值时,istringstream eof 标志没有变为真?

我正在学习如何使用istringstream将存储为字符串的值转换为native类型。当存储为字符串的数字成功转换为int或double时,istringstreameof()函数返回true。当存储为字符串的bool值成功转换为bool时,eof()返回false。造成差异的原因是什么?为什么当似乎没有其他字符需要处理时eof()不返回true?转换为bool值的代码:stringvalue="true";istringstreamconverter(value);boolconvertedValue;if(!(converter>>std::boolalpha>>converted

c++ 要包含哪些文件和库?

很多时候我在互联网上找到有用的代码示例。大约一半的时间他们没有指定要包含哪些文件,甚至没有在命令行中使用-l指定要包含哪些库。你通常如何发现它?编辑说明:下面的问题已经解决。可以跳过这篇文章的其余部分。现在,我在尝试编译时遇到了很多错误:53:stringGunzip::gunzip(string&compressed)54:{55:namespaceio=boost::iostreams;56:57:io::filtering_istreamgunzip;58:gunzip.push(io::gzip_decompressor());59:std::istringstreamin_s

C++:用一个 istringstream 对象读入参数

inti1;std::istringstreamz(argv[1]);z>>i1;cout>i2;cout这是我的代码。我的第一个参数是123,第二个参数是12。我希望输出为12312。但我看到的却是1234196880。这是为什么呢?我认为使用str方法我可以将流重置为第二个参数并将其读入? 最佳答案 当你这样做的时候z.str(argv[2]);该函数在内部调用其内部字符串缓冲区对象(http://www.cplusplus.com/reference/sstream/stringbuf/str/)的str成员,并且仅设置字符串

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++ - 如何从 vector char 初始化字符串流

目前我正在使用一个boostchar数组boost::arrayreceived_data;std::istringstreamss_(received_data.data());但是如果我的received_data是std::vectorreceived_data(512);怎么办?然后我如何将这些数据发送到我的std::istringstreamss_? 最佳答案 istringstream接受一个字符串,一个字符串可以由两个字符迭代器组成,像这样:istringstreamiss(string(v.begin(),v.end