标签: stringstream

C++ Int to String使用ostringstream或stringstream

我一直在使用stringstream转换IntegerString,但后来我意识到同样的操作是可以做到的ostringstream.

当我使用.str()它们之间有什么区别?此外,是否有更有效的方法将整数转换为字符串?

示例代码:

//using ostringstream

ostringstream s1;
int i=100;
s1<<i;
string str_i=s1.str();
cout<<str_i<<endl;

//using stringstream

stringstream s2;
int i2=100;
s2<<i2;
string str_i2=s2.str();
cout<<str_i2<<endl;
Run Code Online (Sandbox Code Playgroud)

c++ string stringstream ostringstream

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

不能用新值覆盖stringstream变量

string whatTime(int seconds) {

 string h,m,s,ans;
 stringstream ss;

 ss << (seconds/3600); 
 seconds -= (3600*(seconds/3600));
 ss >> h;
 ss.str("");

 ss << (seconds/60);
 seconds -= (60*(seconds/60));
 ss >> m;
 ss.str("");

 ss << seconds;
 ss >> s;


 return (h + ":" + m + ":" + s );

}
Run Code Online (Sandbox Code Playgroud)

以上程序的输出以这种格式"some_value ::"我也尝试过ss.str(std :: string())和ss.str().clear(),但即使这样也行不通.有人可以建议如何解决这个问题吗?

c++ stringstream

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

使用stringstream输入/输出bool值

这似乎是一个愚蠢的问题,但我很难过.这是我的代码:

int main()
{
    string line, command;
    getline(cin, line);
    stringstream lineStream(line);

    bool active;
    lineStream >>active;
    cout <<active<<endl;

}
Run Code Online (Sandbox Code Playgroud)

无论我输入什么活动,它总是打印出来0.所以我要说我的输入是

true
Run Code Online (Sandbox Code Playgroud)

它输出0和false同样的东西.

c++ stringstream

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

为什么不是"0"=="0"?

我在这个项目中没有UNICODE.这是一个WinAPI项目,变量"input"是一个字符串流,默认值为"0".为什么第一个id语句运行而不是第二个,即使字符串本身为"0"?

void calc::AddToInput(int number)
{
    MessageBox(NULL, input.str().c_str(), "Input", NULL); //Shows "0"

    if(input.str().c_str() != "0") //Runs even though it shouldn't
    {
        input << number;
    }
    else if(input.str().c_str() == "0") //Doesn't run though it should
    {
        input.str("");
        input << number;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ winapi stringstream

4
推荐指数
2
解决办法
344
查看次数

从字符串读入stringstream

当我尝试从字符串中解析空白分隔的double值时,我发现了这种奇怪的行为,即以循环方式读出字符串.

这是程序:

stringstream ss;
string s("1 2 3 4");
double t;
list<double> lis;

for(int j=0; j!=10; ++j){
    ss << s;
    ss >> t;
    lis.push_back(t);
}

for(auto e : lis){
    cout << e << " ";
}
Run Code Online (Sandbox Code Playgroud)

这里输出:

1 2 3 41 2 3 41 2 3 41
Run Code Online (Sandbox Code Playgroud)

如果我追加尾随空间,s= "1 2 3 4 ";我得到

1 2 3 4 1 2 3 4 1 2 
Run Code Online (Sandbox Code Playgroud)

现在问题:
1)如果我不知道字符串s中有多少条目,我如何读入列表中的所有条目?
2)operator<<我实际上是在打电话ss << s;?是否指定循环阅读?
3)我可以更好地解析吗?

谢谢!


这是固定代码(感谢timrau):

// …
Run Code Online (Sandbox Code Playgroud)

c++ string stringstream

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

在C++中将十六进制字符串转换为unsigned char

我想将字符串中的十六进制表示转换为unsigned char变量,如下所示:

std::stringstream ss;
uint8_t x;
ss << "1f";
ss >> std::hex >> x;  // result: x = 0x31 (=49 in decimal and ='1' as char)
Run Code Online (Sandbox Code Playgroud)

显然,我假设转换会导致x = 0x1f(十进制= 31),因为0x1f小于0xff,这是可以存储在8位无符号字符中的最大值.相反的是,在转换中只使用了我的字符串的前8位.

有人可以向我解释为什么会发生这种情况以及如何解决这个问题?

c++ string hex stringstream

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

如何询问stringstream不要用引号分割数据(C++)

我正在使用std::stringstreamstd::string值中解析一些数据.
这段代码:

std::string str = "data1 data2 data3 \"quotated data\"";
std::stringstream ss(str);
Run Code Online (Sandbox Code Playgroud)

如果我使用,ss >> anotherStr;我会用空格分隔每个单词.
我不明白是否有一个选项可以让stringstream将引号中的数据作为单个字符串值读取?

c++ stringstream

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

这种计算大数的方式如何工作?

通常,要处理超出C++中long long范围的整数,您必须将它们表示为字符串并以这种方式对它们执行操作.但是,我在互联网上发现这个代码似乎像魔术一样.它计算两个幂的总和(没有2 ^ 0),即使它不能存储在很长的长度中.

#include <iostream>  
#include <cmath>  
#include <iomanip>  
#include <sstream>  
using namespace std;

int main() {
    int n;
    stringstream ss;
    cin >> n;

    ss << fixed << setprecision(0) << pow(2, n + 1) - 2;

    if (n >= 54) {
        string a = ss.str();

        a[a.size() - 1] = ((a[a.size() - 1] - 48) - 2) + 48;

        cout << a;
        return 0;
    }

    cout << ss.str();

}
Run Code Online (Sandbox Code Playgroud)

它是如何工作的?它适用于涉及大量的任何操作吗?如果n的值非常大(我试过1024)它只打印"inf".可以这种方式计算的数字范围的上限是多少?

以下部分到底做了什么以及它为什么这样做?

a[a.size() - 1] = ((a[a.size() - 1] - 48) …
Run Code Online (Sandbox Code Playgroud)

c++ largenumber stringstream

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

字符串流和二进制数据

为了从std :: basic_stringstream读/写二进制数据需要什么(某些方法重写?)?我正在尝试以下代码,但是它没有按我预期的那样工作:

std::basic_stringstream<uint64_t> s;
uint64_t a = 9;
s << a;
uint64_t b;
s >> b;
std::cout << b << std::endl;
Run Code Online (Sandbox Code Playgroud)

但我得到“ 0”的字样(使用GCC构建)。

c++ binary stringstream

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

更好地替代istrstream?

istrstream非常适合我的需求 - 基本上,采用固定的char缓冲区,并给我一个简单的方法来提取行getline()和测试eof()

我正在将我们的项目转换为C++ 17合规性 - 这已被弃用istrsteam- 显然是因为有太多的C++程序员无法理解固定的缓冲内存管理(你认真吗?!)

无论如何,它istringstream提供了相同的使用语义,但它强制需要在构造时复制整个固定字符缓冲区.

这是一种反模式.

我正在寻找的是一种方法来string_view代替一个string用于istringstream替代,或者替代一个更好的替代,stringstream它本身处理外部管理的固定缓冲区(它只需指向它,它永远不需要担心管理该资源,只是一样strstream).

目前,在VS 2017中,这是非法的,如果我理解正确的话,在当前最先进的C++中是非法的(如果我错的话,我相信你会纠正我的!)

    std::string_view raw_view(reinterpret_cast<const char *>(raw_buffer.get()), raw_buffer.size());
    std::istringstream raw_stream(raw_view);
Run Code Online (Sandbox Code Playgroud)

那么 - 想法?

注意:Peter Sommerlad在这里为C++标准组织提出了这个确切的想法:http: //www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0448r1.pdf

c++ stringstream string-view c++17

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