【发布时间】:2021-11-07 03:11:32
【问题描述】:
我正在尝试实现一个简单的格式函数,根据给定的格式字符填充相应的内容。
我使用std::stringstream将给定的格式字符串转换为流,然后将字符一个一个取出。然后,根据单个字符,将相关内容填写到输出流中。
格式字符串以std::string 类型给出。
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string fmt = "[%t]%Y-%M-%D<%H:%m:%s>:%c";
std::stringstream s_res;
std::stringstream s_fmt(fmt);
while (s_fmt.good()) {
char c = (char) s_fmt.get();
if (c == '\0') break; // I'm not sure this stagement is necessary.
if (c == '%') {
switch (s_fmt.peek()) {
case 't':
s_res << "Type";
break;
case 'Y':
s_res << "Year";
break;
case 'M':
s_res << "Month";
break;
case 'D':
s_res << "Day";
break;
case 'H':
s_res << "Hour";
break;
case 'm':
s_res << "min";
break;
case 's':
s_res << "sec";
break;
case 'c':
s_res << "content";
break;
}
s_fmt.get();
continue;
}
s_res << c;
}
std::cout << s_res.str();
return 0;
}
正如预期的那样,程序应该输出如下内容:
Expected output: [Type]Year-Month-Day<Hour:min:sec>:content
但是在预期输出的最后,出现了一个奇怪的字符:
Actual Output:[Type]Year-Month-Day<Hour:min:sec>:content
========================================================^
查了很久,很苦恼,找不到可信的解释或具体的解决办法。
这是编码导致的问题吗?
我该如何解决这个问题?
【问题讨论】:
-
输出语句应该是
std::cout << s_res.str() << std::endl;(或'\n'而不是endl),如果最后一行没有以换行符结束会发生什么并没有明确定义
标签: c++ std stringstream