首页 > 解决方案 > 将具有多个字符的字符转换为具有字符串流的字符串时,空格消失

问题描述

这是代码代码的一部分:

time_t now = time(0);
char* date_and_time = ctime(&now);
cout << date_and_time << endl;
string date_and_time_string;
stringstream ss;
ss << noskipws << date_and_time;
ss >> noskipws >> date_and_time_string;
cout << date_and_time_string << endl;

我不明白当它有多个字符时date_and_time是怎么回事char,当我想把它变成一个字符串时,它会在空格出现时停止。我试着把它有或没有,noskipws但无济于事。如果打印date_and_time类似于"Thu Jul 01 23:52:46 2021",当它变成字符串时,它就是"Thu".

标签: c++

解决方案


我不明白当它有多个字符时date_and_time是怎么回事char

它不是一个s char,它是一个char*指向 s 的以 null 结尾的数组的指针char

当我想把它变成一个字符串时,它会在空格出现时停止。

因为这就是operator>>工作方式。它停止读取空白或 EOF,以先发生者为准。

我尝试在有或没有 noskipws 的情况下放置它,但无济于事。

noskipws在第一个>>告诉它不要跳过前导空格之前。但是您的输入字符串没有任何内容,因此noskipws在这种情况下实际上是无操作的。它对第二个没有影响,>>因为第一个在完成读取后从流中清除了该标志。

如果打印date_and_time类似于"Thu Jul 01 23:52:46 2021",当它变成字符串时,它就是"Thu".

因为您正在使用>>解析字符串。这是正常行为。

如果您想要整个字符串,请std::getline()改用:

stringstream ss;
ss << date_and_time;
/* alternatively:
istringstream ss(date_and_time);
*/
getline(ss, date_and_time_string);

或者,由于在这种情况下根本没有理由使用std::(i)stringstream,您可以直接分配date_and_timedate_and_time_string

date_and_time_string = date_and_time;

推荐阅读