标签: stringstream

C++将简单值转换为字符串

现在我用下面的一段代码dummily转换基本类型(int,long,char[],这种东西),以std::string进行进一步的处理:

template<class T>
constexpr std::string stringify(const T& t)
{
    std::stringstream ss;
    ss << t;
    return ss.str();
}
Run Code Online (Sandbox Code Playgroud)

但是我不喜欢它依赖的事实std::stringstream.我尝试使用std::to_string(来自C++ 11的保留节目)然而它会扼杀char[]变量.

有一种简单的方法可以为这个问题提供优雅的解决方案吗?

c++ stringstream string-conversion c++11

22
推荐指数
4
解决办法
4864
查看次数

C++:将char插入字符串

所以我试图将从字符串中获取的字符插入另一个字符串.在这里,我的行动:1.我想使用简单:

someString.insert(somePosition, myChar);
Run Code Online (Sandbox Code Playgroud)

2.我收到错误,因为insert需要(在我的情况下)char*或string
3.我通过stringstream将char转换为char*:

stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
Run Code Online (Sandbox Code Playgroud)

一切似乎都在成功编译,但程序崩溃了

conversion >> myCharInsert;
Run Code Online (Sandbox Code Playgroud)

线.

5.我正在尝试用字符串替换char*:

stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
Run Code Online (Sandbox Code Playgroud)

一切似乎都没问题,但是当它someAnotherString.at(someOtherPosition)变成空间时,程序会崩溃.

那么我该怎么做呢?

c++ string insert stringstream

21
推荐指数
1
解决办法
6万
查看次数

将数据从fstream复制到stringstream而没有缓冲区?

无论如何我可以将数据从fstream(一个文件)传输到stringstream(内存中的流)吗?

目前,我正在使用缓冲区,但这需要双倍的内存,因为您需要将数据复制到缓冲区,然后将缓冲区复制到字符串流,直到您删除缓冲区,数据在内存中重复.

std::fstream fWrite(fName,std::ios::binary | std::ios::in | std::ios::out);  
    fWrite.seekg(0,std::ios::end); //Seek to the end  
    int fLen = fWrite.tellg(); //Get length of file  
    fWrite.seekg(0,std::ios::beg); //Seek back to beginning  
    char* fileBuffer = new char[fLen];  
    fWrite.read(fileBuffer,fLen);  
    Write(fileBuffer,fLen); //This writes the buffer to the stringstream  
    delete fileBuffer;`
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何在不使用inbetween缓冲区的情况下将整个文件写入字符串流?

c++ buffer fstream stl stringstream

21
推荐指数
3
解决办法
4万
查看次数

如何使用stringstream格式化十六进制数字

我试图将unsigned short转换为大写的十六进制表示,并使用stringstream将前缀为0.我似乎无法得到大写和0的正确.这是我现在拥有的:

USHORT id = 1127;
std::stringstream ss;
ss << std::showbase << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;
std::string result = ss.str();
Run Code Online (Sandbox Code Playgroud)

这导致前缀'0x'也是大写的,但我希望它是小写的.它还导致在前缀0x base(当前为0X)之后没有前缀0到十六进制值.例如,现在将输出0X467而不是预期的0x0467.我该如何解决?

c++ hex stringstream string-formatting c++11

21
推荐指数
1
解决办法
4万
查看次数

cout << stringstream

当我把一些东西放进一个字符串流中时,让我们说一个实数,如果我然后将该stringstream对象插入cout ......我在看什么?

通常我会得到一些奇怪的数字.这是一个记忆位置吗?只是好奇.

看起来下面的评论命中了它,但这是我正在尝试做的事情:

string stringIn; 
stringstream holdBuff;
holdBuff << getline(cin, stringIn);
cout << holdBuff; 
Run Code Online (Sandbox Code Playgroud)

基本上我只是在插入stringIn时试图看看holdBuff是什么样的.我试图让用户输入一个字符串,然后我想逐步查找它的内容,并可能转换...

c++ stringstream

20
推荐指数
4
解决办法
5万
查看次数

从stringstream中删除char并附加一些数据

在我的代码中有一个循环,它将"number"添加到stringstream.当它结束时,我需要提取','添加'}'并添加'{'如果要重复循环.

我以为我可以使用ignore()删除','但它不起作用.你知道我怎么做我描述的吗?

例:

douCoh << '{';
for(unsigned int i=0;i<dataSize;i++)
  if(v[i].test) douCoh << i+1 << ',';
douCoh.get(); douCoh << '}';
Run Code Online (Sandbox Code Playgroud)

c++ stringstream

19
推荐指数
5
解决办法
4万
查看次数

是否可以将字符串流作为函数参数传递?

是否可以传入一个字符串流并让函数直接写入?

我记得我看到一个类似于这样的函数被调用:

my_func(ss << "text" << hex << 33);
Run Code Online (Sandbox Code Playgroud)

c++ function stringstream parameter-passing

19
推荐指数
3
解决办法
2万
查看次数

如何初始化std :: stringstream?

我需要将字符串与整数连接起来.为此,我使用stringstream以下方式:

int numPeople = 10;
stringstream ss;
ss << "Number of people is " << numPeople;
Run Code Online (Sandbox Code Playgroud)

这很有效.但我试图通过以下方式做到:

int numPeople = 10;
stringstream ss << "Number of people is " << numPeople;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:" '''令牌之前的预期初始化程序 "

为什么我收到此错误?为什么我不能stringstream在声明它的同时分配值?

c++ stringstream

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

使用str(const char*)设置std :: stringstream的内容会产生奇怪的后果

std::stringstream广泛使用它来生成代码.当使用str()函数设置内容然后使用时,我遇到了一些奇怪的行为operator<<.有人可以向我解释这种行为.我非常感谢 - 谢谢.

示例一:

std::stringstream ssa;
ssa.str("Setting string");
std::cout << ssa.str() << std::endl;
ssa << " adding to string";
std::cout << ssa.str() << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

设置字符串

添加到字符串

预期:

设置字符串

设置字符串添加到字符串

因此,在对文档进行一些阅读之后,我发现我应该将打开模式设置为ios_base::ate:

std::stringstream ssb(std::ios_base::ate);
ssb.str("Setting string");
std::cout << ssb.str() << std::endl;
ssb << " adding to string";
std::cout << ssb.str() << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

设置字符串

设置字符串

再次(或现在)我期望:

设置字符串

设置字符串添加到字符串

为什么我会得到我的结果,我如何得到我想要的结果?Ei能够设置a的初始stringstringstream和附加值string吗?

我知道我可以将内容设置为空string(""),然后只使用<<operator.这实际上是我正在使用的解决方法.我只是不明白观察到的行为.解决方法使我的代码更加混乱.

c++ stringstream c++11

19
推荐指数
2
解决办法
2048
查看次数

如何重用stringstream

这些线程不回答我:

重置字符串流

你如何清除stringstream变量?

        std::ifstream file( szFIleName_p );
        if( !file ) return false;

        // create a string stream for parsing

        std::stringstream szBuffer;

        std::string szLine;     // current line
        std::string szKeyWord;  // first word on the line identifying what data it contains

while( !file.eof()){

            // read line by line

            std::getline(file, szLine);

            // ignore empty lines

            if(szLine == "") continue;

            szBuffer.str("");
            szBuffer.str(szLine);
            szBuffer>>szKeyWord;
Run Code Online (Sandbox Code Playgroud)

szKeyword将始终包含第一个单词,szBuffer未被重置,无法在任何地方找到关于如何使用stringstream的明确示例.

回答后的新代码:

...
            szBuffer.str(szLine);
            szBuffer.clear();
            szBuffer>>szKeyWord;
...
Run Code Online (Sandbox Code Playgroud)

好的,那是我的最终版本:

        std::string szLine;     // current line
        std::string szKeyWord;  // first word …
Run Code Online (Sandbox Code Playgroud)

c++ parsing text file stringstream

17
推荐指数
2
解决办法
3万
查看次数