C++ 如何使用stringstream作为c++;功能?
我正在寻找用其他原语附加字符串的解决方案,发现stringstream是最简单的解决方案。然而,我想简化这个过程,所以我想做一个函数来简化它的使用。如果您提出了连接的替代方法,我需要最终结果为char*。我使用了一个循环(I): 然后我可以做一些类似的事情:C++ 如何使用stringstream作为c++;功能?,c++,string,function,concatenation,stringstream,C++,String,Function,Concatenation,Stringstream,我正在寻找用其他原语附加字符串的解决方案,发现stringstream是最简单的解决方案。然而,我想简化这个过程,所以我想做一个函数来简化它的使用。如果您提出了连接的替代方法,我需要最终结果为char*。我使用了一个循环(I): 然后我可以做一些类似的事情: std::stringstream ss; ss << "test" << i; char* name = string_to_pointer( name, &ss ); std::string
std::stringstream ss;
ss << "test" << i;
char* name = string_to_pointer( name, &ss );
std::stringstream-ss;
党卫军
会更干净!与string\u to\u cstring(ss.str())一起使用
需要返回的C字符串是可更改的吗?因为如果没有,只要在需要的地方使用ss.str().c_str()
或使用:
char* result = new char[ss.str().size() + 1] (); // value initialized
ss.str().copy(result,std::string::npos);
使用std::stringstream::str()
函数检索字符串的内容
例如:
int foo = 42;
double bar = 12.67;
std::stringstream ss;
ss << "foo bar - " << foo << ' ' << bar;
std::string result = ss.str();
像这样的东西怎么样:
#include <string>
#include <sstream>
class ToString {
std::ostringstream stream;
public:
template<typename T>
inline ToString &operator<<(const T&val) {
stream << val;
return *this;
}
inline operator std::string() const {
return stream.str();
}
};
std::string str = ToString() << "Test " << 5 << " and " << 4.2;
#包括
#包括
类ToString{
std::奥斯汀溪流;
公众:
模板
内联ToString&Operator您是否尝试过?编辑:您的运行时问题是什么?为什么需要执行“字符串\u到\u指针”转换?你确定你希望最终结果是“char*”?如果它是final,那么就不需要再修改它了,所以可能是const char*?这样你可以继续使用stringstream直到最后。string\u to\u指针很奇怪:它不使用它的第一个参数。我真的看不出这个函数的用途…你使用的是trings和stringstreams这样你就可以避免类似strcpy的东西谢谢你的回复。我最终选择了一条完全不同的路线,我想这只是我尝试了100种方法,但问题变得更加混乱的一个例子。从你的所有回复中,我发现我的问题有很多错误,谢谢大家。我找到了解决方案与您的第二个代码块非常相似。我无法将该块压缩为易于使用的函数。类似于:char*myFunc(char*dest,stringstream ss)
或char*myFunc(char*dest,string s)
。具体来说:错误5错误C3867:'std::basic_string::c_str':函数调用缺少参数列表;使用“&std::basic_string::c_str”创建指向成员的指针
感谢您的响应,对于像我这样从未见过内联运算符std::string()的人来说非常简洁const
作为一个成员函数,它被称为a。我在中发现了它。
int foo = 42;
double bar = 12.67;
std::stringstream ss;
ss << "foo bar - " << foo << ' ' << bar;
std::string result = ss.str();
std::unique_ptr<char[]> cstring = new char[result.size() + 1];
strcpy(cstring.get(), result.c_str());
#include <string>
#include <sstream>
class ToString {
std::ostringstream stream;
public:
template<typename T>
inline ToString &operator<<(const T&val) {
stream << val;
return *this;
}
inline operator std::string() const {
return stream.str();
}
};
std::string str = ToString() << "Test " << 5 << " and " << 4.2;