我什么时候会使用std::istringstream , std::ostringstream和std::stringstream ,为什么不应该在每个场景中使用std::stringstream (是否有任何运行时性能问题? 最后,有什么不好的(而不是使用stream): std::string stHehe("Hello "); stHehe += "stackoverflow.com"; stHehe += "!";
为了提高从文件读取性能,我试图将一个大(几MB)文件的全部内容读入内存,然后使用istringstream来访问这些信息。 我的问题是,读取这些信息并将其“导入”stringstream的最佳方法是? 这种方法(见下文)的一个问题是,当创buildstringstream时,缓冲区被复制,内存使用量加倍。 #include <fstream> #include <sstream> using namespace std; int main() { ifstream is; is.open (sFilename.c_str(), ios::binary ); // get length of file: is.seekg (0, std::ios::end); long length = is.tellg(); is.seekg (0, std::ios::beg); // allocate memory: char *buffer = new char [length]; // read data as a block: is.read (buffer,length); // create string stream […]
我有以下代码: std::string str = "abc def,ghi"; std::stringstream ss(str); string token; while (ss >> token) { printf("%s\n", token.c_str()); } 输出是: ABC DEF,GHI 所以stringstream::>>运算符可以用空格分隔string,但不能用逗号分开。 无论如何修改上面的代码,以便我可以得到以下结果? input :“abc,def,ghi” 输出 : ABC 高清 GHI
当我使用getline ,我会input一串string或者数字,但是如果它不是一个数字,我只希望while循环输出“word”。 那么有什么办法来检查“单词”是否是一个数字? 我知道我可以使用atoi()的Cstring,但如何处理string类的string? int main () { stringstream ss (stringstream::in | stringstream::out); string word; string str; getline(cin,str); ss<<str; while(ss>>word) { //if( ) cout<<word<<endl; } }
stringstream parser; parser << 5; short top = 0; parser >> top; parser.str(""); //HERE I'M RESETTING parser parser << 6; //DOESN'T PUT 6 INTO parser short bottom = 0; parser >> bottom; 为什么不起作用?
我的问题可以归结为,从stringstream.str().c_str()返回的string在内存中,为什么不能被分配给一个const char* ? 这个代码示例会比我更好地解释它 #include <string> #include <sstream> #include <iostream> using namespace std; int main() { stringstream ss("this is a string\n"); string str(ss.str()); const char* cstr1 = str.c_str(); const char* cstr2 = ss.str().c_str(); cout << cstr1 // Prints correctly << cstr2; // ERROR, prints out garbage system("PAUSE"); return 0; } stringstream.str().c_str()可以被分配给一个const char*的假设导致了一个我花了一段时间追踪的bug。 对于奖励积分,任何人都可以解释为什么用replacecout语句 cout << […]
我已经尝试了几件事情, std::stringstream m; m.empty(); m.clear(); 两者都不起作用。
我有兴趣讨论使用stringstream分析多个types的行的方法。 我将首先看以下行: "2.832 1.3067 nana 1.678" 现在让我们假设我有一个很长的行,有多个strings和doubles 。 解决这个问题的显而易见的方法是标记string,然后检查每个string的转换。 我有兴趣跳过这第二步,直接使用stringstream只find数字。 我想通过这种方法来读取string,并检查是否已经设置了failbit ,如果我尝试将stringparsing为双failbit ,那么这将是一个好办法。 说我有以下代码: string a("2.832 1.3067 nana 1.678"); stringstream parser; parser.str(a); for (int i = 0; i < 4; ++i) { double b; parser >> b; if (parser.fail()) { std::cout << "Failed!" << std::endl; parser.clear(); } std::cout << b << std::endl; } 它会打印出以下内容: 2.832 […]