我遇到了stringstream.my visual studio的问题,linux g ++也无法理解stingstream.我添加了sstream但它没有解决任何问题.我以前一直在使用它,现在真的不知道它有什么用呢?
#include <sstream>
#include <stdlib.h>
#include "SymbolTable.cpp"
#include "setjmp.h"
using namespace std;
jmp_buf *bfj;
int TOP , SP=3 ;
struct types{int int_val;float float_val;char char_val;bool bool_val;};
types DS[6400];
int main(){
...//some code here
label38 : stringstream s;
label39 : bfj = (jmp_buf *)"label65";
label40 : longjmp(*bfj,1);;
label41 : goto label43;
label42 : TOP=SP;
//some code here
}
Run Code Online (Sandbox Code Playgroud)
我正在编写一个编译器,所以代码是输出,这就是为什么它可能会有点奇怪.
这是我正在尝试做的事情:
说我有一个stringstream.然后我<< "\"hello world\" today";
然后当我这样做
sstr >> myString1 >> myString2;
Run Code Online (Sandbox Code Playgroud)
我希望myString1拥有"hello world",而myString2拥有"今天"
有没有办法,可能有操纵者,来实现这一目标?
谢谢
我有大量的c ++类从文件流中读取数据.功能看起来像这样.
bool LoadFromFile(class ifstream &file);
Run Code Online (Sandbox Code Playgroud)
我正在创建一个新的函数来从内存而不是文件中读取.所以我google了一下,一个istringstream似乎没有任何修改代码.
bool LoadFromData(class istringstream &file);
Run Code Online (Sandbox Code Playgroud)
现在我的问题是.我需要构造此流以从char数组中读取.该字符串不是以空值终止的,它是纯二进制数据,我得到了一个大小的整数.我尝试将其分配给字符串并从字符串创建流,但字符串在空字符后终止..并且数据被复制.
int size;
char *data;
string s = *data;
Run Code Online (Sandbox Code Playgroud)
如何在不复制数据的情况下从char数组指针创建字符串+指定指针数据的大小?除了字符串流,你知道其他任何解决方案吗?
据我了解, astd::stringstream在内部表示不是作为一个std::string而是作为一组std::string实例。(如果我错了,请纠正我)。
我有表示为 an 的数据std::stringstream,我想将它传递给一个 C 函数(clCreateProgramWithSource来自 OpenCL),该函数期望数据作为字符数组的数组。( const char**).
是否有某种方法可以在不首先创建一个包含 stringstream 的全部内容的字符串的情况下执行此操作,例如通过以下方式:
std::string tmp1 = my_stringstream.str();
const char* tmp2 = tmp1.c_str();
const char** tmp3 = &tmp2;
Run Code Online (Sandbox Code Playgroud)
编辑
后续问题:
如果这是没有可能的,是有一些替代方案std::stringstream,继承std::ostream,允许这种低级别的访问权限?
所以,我正在尝试在我的程序中使用stringstream,以获得一些格式化的字符串(特别是因为我需要将数字转换为字符串).
问题是,我的程序崩溃,当我使用Visual Studio调试它时,在我的间谍窗口中,我看到我的stringstream的字符串缓冲区产生(当试图向其添加"Framerate"时):
"FramerateÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««îþîþ"
代码:
std::stringstream s;
s << "Framerate";
Run Code Online (Sandbox Code Playgroud)
我的代码然后会在我尝试获取相关字符串时崩溃...我找不到任何解释,也没有我的代码问题......
编辑:原来这些字符不是问题,并且stringstream返回预期的字符串str().
我正在编写一个自定义记录器,我将日志消息缓冲在 a 中,std::stringstream并在文件足够大std::ofstream时将其刷新到文件 ( ) 中std::stringstream(以节省一些 IO 延迟)。由于std::stringstream没有.size()方法,我使用seekg和tellg:
template <typename T>
MyClass & operator<< (const T& val)
{
boost::unique_lock<boost::mutex> lock(mutexOutput);
output << val; //std::stringstream output;
output.seekg(0, std::ios::end);
if(output.tellg() > 1048576/*1MB*/){
flushLog();
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
问题:在我看来,每当我调用此方法时,它都会seekg从头到尾开始计算字节数,并使用tellg. 我想出这个设计首先是为了节省一些 IO 时间,但是:这种连续计数是否会带来更大的成本(如果在大多数情况下调用此方法的次数很高并且日志消息很小) )?
有一个更好的方法吗?
还有一个附带问题:1MB在当今的普通计算机中,缓冲区大小是一个很好的数字吗?
谢谢
我正在测试如何读取数据,std::streamstring但我弄错了,有人能指出问题是什么吗?并给出一个正确的阅读方式?
我的测试代码是:
#include <iostream>
#include <string>
#include <sstream>
#define BUFFER_SIZE 16
int main(int argc, char ** argv)
{
std::stringstream ss;
ss << "Un texto con datos de ejemplo para probar la extacción de un stream";
std::cout << "Stream contents: '" << ss.str() << "'" << std::endl;
char buffer[BUFFER_SIZE] = {0};
std::streamsize read = 0;
do {
read = ss.readsome(buffer, BUFFER_SIZE - 1);
std::cout << "Read: " << ss.gcount() << std::endl;
std::cout << buffer << std::endl;
std::cout << "---" …Run Code Online (Sandbox Code Playgroud) 我一直在研究一个问题,即我将浮点数转换为人类可读格式,然后返回.即一个字符串.我使用stringstream遇到了问题,发现atof会产生"更好"的结果.
请注意,在这种情况下我不打印数据,我使用调试器来检索值:
const char *val = "73.31";
std::stringstream ss;
ss << val << '\0';
float floatVal = 0.0f;
ss >> floatVal; //VALUE IS 73.3100052
floatVal = atof(val); //VALUE IS 73.3099976
Run Code Online (Sandbox Code Playgroud)
对此可能有一个合理的解释.如果有人能够启发我,我会很高兴:).
我有以下代码:
#include <string>
#include <iostream>
#include <sstream>
int main()
{
size_t x, y;
double a = std::stod("1_", &x);
double b = std::stod("1i", &y);
std::cout << "a: " << a << ", x: " << x << std::endl;
std::cout << "b: " << b << ", y: " << y << std::endl;
std::stringstream s1("1_");
std::stringstream s2("1i");
s1 >> a;
s2 >> b;
std::cout << "a: " << a << ", fail: " << s1.fail() << std::endl;
std::cout << "b: " << …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 的帮助下逐字循环字符串stringstream,这是我的代码:
string str = "hello world";
stringstream ss(str);
string word;
while (ss)
{
ss >> word;
cout << word << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到的结果如下:
hello
world
world
Run Code Online (Sandbox Code Playgroud)
为什么我得到了world两次?