现在我用下面的一段代码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[]变量.
有一种简单的方法可以为这个问题提供优雅的解决方案吗?
所以我试图将从字符串中获取的字符插入另一个字符串.在这里,我的行动: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)变成空间时,程序会崩溃.
那么我该怎么做呢?
无论如何我可以将数据从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缓冲区的情况下将整个文件写入字符串流?
我试图将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.我该如何解决?
当我把一些东西放进一个字符串流中时,让我们说一个实数,如果我然后将该stringstream对象插入cout ......我在看什么?
通常我会得到一些奇怪的数字.这是一个记忆位置吗?只是好奇.
看起来下面的评论命中了它,但这是我正在尝试做的事情:
string stringIn;
stringstream holdBuff;
holdBuff << getline(cin, stringIn);
cout << holdBuff;
Run Code Online (Sandbox Code Playgroud)
基本上我只是在插入stringIn时试图看看holdBuff是什么样的.我试图让用户输入一个字符串,然后我想逐步查找它的内容,并可能转换...
在我的代码中有一个循环,它将"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) 是否可以传入一个字符串流并让函数直接写入?
我记得我看到一个类似于这样的函数被调用:
my_func(ss << "text" << hex << 33);
Run Code Online (Sandbox Code Playgroud) 我需要将字符串与整数连接起来.为此,我使用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在声明它的同时分配值?
我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的初始string值stringstream和附加值string吗?
我知道我可以将内容设置为空string(""),然后只使用<<operator.这实际上是我正在使用的解决方法.我只是不明白观察到的行为.解决方法使我的代码更加混乱.
这些线程不回答我:
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)