标签: stringstream

stringstream未在此范围内声明

我遇到了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)

我正在编写一个编译器,所以代码是输出,这就是为什么它可能会有点奇怪.

c++ stringstream

5
推荐指数
1
解决办法
2万
查看次数

当>>一个字符串流时改变双引号的行为

这是我正在尝试做的事情:

说我有一个stringstream.然后我<< "\"hello world\" today";

然后当我这样做

sstr >> myString1 >> myString2;
Run Code Online (Sandbox Code Playgroud)

我希望myString1拥有"hello world",而myString2拥有"今天"

有没有办法,可能有操纵者,来实现这一目标?

谢谢

c++ stl stringstream

5
推荐指数
2
解决办法
3647
查看次数

C++转换文件流功能以使用字符串流

我有大量的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数组指针创建字符串+指定指针数据的大小?除了字符串流,你知道其他任何解决方案吗?

c++ stringstream ifstream

5
推荐指数
1
解决办法
2119
查看次数

哪个更有效/更整洁:清除现有的字符串流还是创建新的字符串流?

出于好奇心的简单问题.

类上的多个方法需要使用字符串流,或者特别是ostringstream.

1)将一个stringstream变量作为类成员,然后在使用它之前清除它,即msg.str("")

2)每次需要使用时,在每个方法中本地创建一个新的stringstream变量.

在效率和整洁方面,哪种方法最好?

我的预感是选项1,但不确定初始构造是否与每次调用str()相结合会更糟?

PS我读过初始化..哪一个效率更高?这是更快/更有效?,我的下一步将是让我研究分析和编写一个小测试应用程序,但我觉得要求可能更快:-)

c++ performance stringstream

5
推荐指数
1
解决办法
532
查看次数

为什么stringstream会产生奇怪的值?

所以,我正在尝试在我的程序中使用stringstream,以获得一些格式化的字符串(特别是因为我需要将数字转换为字符串).

问题是,我的程序崩溃,当我使用Visual Studio调试它时,在我的间谍窗口中,我看到我的stringstream的字符串缓冲区产生(当试图向其添加"Framerate"时):

"FramerateÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««îþîþ"

代码:

std::stringstream s;
s << "Framerate";
Run Code Online (Sandbox Code Playgroud)

我的代码然后会在我尝试获取相关字符串时崩溃...我找不到任何解释,也没有我的代码问题......

编辑:原来这些字符不是问题,并且stringstream返回预期的字符串str().

c++ stringstream

5
推荐指数
1
解决办法
2682
查看次数

c ++使用单行m.swap清除字符串流(std :: stringstream());?

我一直在使用以下代码来清除std::stringstream:

m.swap(std::stringstream());
Run Code Online (Sandbox Code Playgroud)

代码可能来自这个SO线程.最近我在Visual Studio 2013中编译了我的代码,我收到了以下警告:

warning C4239: nonstandard extension used : 'argument' : conversion from 'std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>' to 'std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>> &'
1>          A non-const reference may only be bound to an lvalue
Run Code Online (Sandbox Code Playgroud)

我没有在早期版本的Visual Studio中使用/ W4收到任何警告.我记得在早期版本中我无法可靠地清除字符串流,这就是我最初使用该代码的原因.

因此,通过这种方式清除字符串流是否可移植,如果没有,你可以解释为什么不呢?还有一种可移植的方式来清除字符串流吗?谢谢

编辑:这是请求的代码.使用它来编译它/W4以查看警告.

int _tmain(int argc, _TCHAR* argv[])
{
    std::stringstream m;
    m.swap(std::stringstream());

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ stringstream visual-studio-2013

5
推荐指数
1
解决办法
727
查看次数

好吧,要么我疯了,要么IBM编译器中有一个错误

如果他们能告诉我为什么streamstream<<(char)忽略0x05,我会给任何人买啤酒.这个节目正在制作中000102030406070809E280081150121314

我认为预期的输出更像是: 00010203040506070809E2800811050505050505050550121314

IBM i(aka AS/400)C++编译器,在V7R1上运行.

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <stdint.h>

using namespace std;


typedef int8_t byte;

int main(int argc, char* argv[])
{
    stringstream sstr2;
    sstr2 << char(0x00);
    sstr2 << char(0x01);
    sstr2 << char(0x02);
    sstr2 << char(0x03);
    sstr2 << char(0x04);
    sstr2 << char(0x05);
    sstr2 << char(0x06);
    sstr2 << char(0x07);
    sstr2 << char(0x08);
    sstr2 << char(0x09);
    sstr2 << char(0xe2);
    sstr2 << char(0x80);
    sstr2 << char(0x08);
    sstr2 << char(0x11);
    sstr2 << char(0x05);
    sstr2 …
Run Code Online (Sandbox Code Playgroud)

c++ stringstream

5
推荐指数
1
解决办法
213
查看次数

用stringstream更新后C++ stringstream无法正常工作:str()

我知道stringstream可以更新stringstream::str(),但是如果我在stringstream之后输入其他内容,则无法按预期工作.以下代码段演示了这种现象:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;
int main()
{
    stringstream ss; //ostringstream gives the same output
    ss << "Original string ";
    ss.str("Updated string ");
    ss << "sth else";
    cout << ss.str() << endl;
}
Run Code Online (Sandbox Code Playgroud)

我希望得到输出

Updated string sth else
Run Code Online (Sandbox Code Playgroud)

但它实际上是输出

sth elsestring
Run Code Online (Sandbox Code Playgroud)

似乎相反,将新输入的字符串附加到当前字符串的末尾(在我的情况下Updated string),它会尝试从头开始覆盖它.我的代码出了什么问题?

这是一个现场演示

c++ string stringstream

5
推荐指数
1
解决办法
1147
查看次数

从字符串流中读取内容

我正在测试如何读取数据,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)

c++ stringstream

5
推荐指数
1
解决办法
1751
查看次数

atof和stringstream产生不同的结果

我一直在研究一个问题,即我将浮点数转换为人类可读格式,然后返回.即一个字符串.我使用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)

对此可能有一个合理的解释.如果有人能够启发我,我会很高兴:).

c++ floating-point precision stringstream atof

5
推荐指数
1
解决办法
635
查看次数