标签: stringstream

为什么 stringstream ss(s) 与 ss << s 不同?

当我尝试使用 stringstream 时

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

int main() {
    std::string s = "Hello World Test";
    std::stringstream ss(s);

    std::string a, b;
    ss >> a >> b;
    std::cout << a << ' ' << b << std::endl; // Hello World

    ss << " Why Not";
    ss >> a >> b;
    std::cout << a << ' ' << b << std::endl; // Still Hello World

    std::string c, d;
    std::stringstream tt;
    tt << s;

    tt >> c >> d;
    std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ string constructor stringstream bidirectional

3
推荐指数
1
解决办法
124
查看次数

mac地址的输出格式(C++,stringstream)

我找到了代码:

static void PrintMACaddress(unsigned char MACData[])
{
    printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}
Run Code Online (Sandbox Code Playgroud)

此功能打印MAC地址 00-53-45-00-00-00

我的问题:

打印时如何制作这种格式std::stringstream

更新:

谢谢大家的意见!

我不知道为什么,但有些解决方案没有static_cast<unsigned int>给我奇怪的字符,?-0?-0M-0?-0m-0?所以我选择了icecrime的boost版本:

void PrintMACaddressWithBoostFormat(unsigned char MACData[])
{
    boost::format fmt("%02X-%02X-%02X-%02X-%02X-%02X");

    for (int i = 0; i != 6; ++i)
    {
        fmt % static_cast<unsigned int>(MACData[i]);
    }

    std::stringstream valStream(fmt.str().c_str());

    //testing
    std::cout << "Boost version: " << valStream.str().c_str() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

Palmik解决方案也很棒;)

谢谢!

c++ string format stringstream

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

这种方式可以串流吗?从字符串转换为int?

是否有可能像这样串流?我试着用ifstream读取并转换它.

string things = "10 11 12 -10";
int i1;
int i2;
int i3;
int i4;
stringstream into;
into << things;
into >> i1;
into >> i2;
into >> i3;
into >> i4;
Run Code Online (Sandbox Code Playgroud)

我希望它是:

i1 = 10
i2 = 11
i3 = 12
i4 = -10
Run Code Online (Sandbox Code Playgroud)

那是对的吗?

可以多次使用相同的stringstream变量吗?

当我尝试时,第一次没问题,但其他一切都只是0.

c++ string stringstream type-conversion

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

有一些数据的字符串流如何跨平台方式gzip?

所以我们有一些带有一些数据的字符串流.借助跨平台库,我们可以将其内容转换为gziped格式(您可以将其保存到扩展名为.tar.gz的文件中)

让我们进入代码:所以我有:

          stringstream body;
          body << std::ifstream( path.string().c_str(), ios::binary).rdbuf();
Run Code Online (Sandbox Code Playgroud)

我应该添加哪些函数,我应该调用哪个函数来编码stringstream以及调用哪个函数转而将编码数据放入stringstream?

BTW:有没有可以编码成gzip的boost库

c++ compression stringstream

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

打印Stringstream输出指针

"Bar"以下代码不是输出预期的字符串,而是输出看起来像指针的内容.

#include <sstream>
#include <iostream>

int main()
{
    std::stringstream Foo("Bar");
    std::cout << Foo << std::endl; // Outputs "0x22fe80."
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这可以通过使用来解决Foo.str(),但它在过去给我带来了一些问题.是什么导致这种奇怪的行为 它在哪里记录?

c++ pointers stringstream implicit-conversion

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

提取运算符(>>)是否可以覆盖变量?

我写了以下测试代码:

int main(int argc, char* argv[]) {
    stringstream ss;
    int num;

    ss << "54321";
    ss >> num;
    ss.str("");
    ss << "12345";
    ss >> num;

    fprintf(stderr, "%d\n", num);
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,结果是54321.如何使用提取运算符(>>)正确覆盖变量?

c++ stringstream

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

如何让std :: stringsteam在浮点数上排列小数位?

在C++中,我有一些像这样的代码:

float hits = 10.12;
float mins = 2.19;
std::ostringstream ss;

ss.precision(2);

ss << std::fixed << hits << "%\n"
   << std::fixed << mins << "%";

std::cout << ss.str();
Run Code Online (Sandbox Code Playgroud)

哪个给了我这个输出:

10.12%
2.19%
Run Code Online (Sandbox Code Playgroud)

而我希望小数位对齐:

10.12%
 2.19%
Run Code Online (Sandbox Code Playgroud)

有没有办法在小数点前填充空格,以便在小数位前有两位数的固定空格宽度?

c++ floating-point stringstream string-formatting text-alignment

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

继承自std :: ostringstream

在我的项目中,我使用一个名为Message的类,它继承自std :: ostringstream,打印出其他类类型的人类可读信息.

所以它的<<运算符多次重载我自己的类类型,我想打印出来.

class Message : public ostringstream
{
public:
    Message() {};
    virtual ~Message() {};

    Message& operator <<(const MyTypeA &a) { return *this << a.getStr(); };
    Message& operator <<(const MyTypeB &b) { return *this << b.identifier(); };
    Message& operator <<(const MyTypeC &c) { return *this << c.foo(); };

    // Pass everything unknown down to ostringstream, and always return a Message&
    template<class T>
    Message& operator <<(const T &t)
    {
        (std::ostringstream&)(*this) << t;
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

没有模板

MyTypeA a,b;
Message …
Run Code Online (Sandbox Code Playgroud)

c++ templates stringstream

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

意外的字符串流行为

请考虑以下代码:

#include <sstream>
#include <iostream>

using namespace std;

int main()
{
    stringstream ss;

    ss << string("12");
    int h;
    ss >> h;
    cout << h << endl;

    ss.str(string("")); // clear the content of ss

    ss << string("30");
    int m;
    ss >> m;
    cout << m << endl;

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

运行上面的代码会产生一些随机输出:

12
0
Run Code Online (Sandbox Code Playgroud)

在某些其他时间,观察到以下输出:

12
4
Run Code Online (Sandbox Code Playgroud)

我期望输出简单:

12 
30
Run Code Online (Sandbox Code Playgroud)

为什么我会得到意想不到的结果?

此外,string sint i没有必要的C++ 11支持的情况下解析一个to 的最佳方法是什么?应该是int i = atoi(s.c_str())吗?

c++ iostream stringstream istream

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

sgetn没有Null终止字符串

sgetn取一个char*for它的第一个参数并将字符写入其中.它不是写一个尾随'\0'char*.

这种行为似乎与我可以找到char*写入的所有其他时间不一致.但是,它在Clang,gcc和Visual Studio中一致的,所以我无法相信它是所有编译器都有的错误.

是否有一个原因,该标准不要求尾部'\0'char*

[ 实例 ]

c++ buffer c-strings stringstream null-terminated

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