c++ - 将具有多个字符的字符转换为具有字符串流的字符串时,空格消失
问题描述
这是代码代码的一部分:
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"
.
解决方案
我不明白当它有多个字符时
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_time
给date_and_time_string
:
date_and_time_string = date_and_time;
推荐阅读
- python - 在 python 中更新访问令牌
- python - 散景:动态更新垂直线的位置。
- firebase - PGB Phonegap Builder cordova-plugin-firebase - 未找到 ID 为“com.google.gms.google-services”的插件
- python - 从子进程打印弹出标准输出时出现问题
- asp.net-mvc - 从客户端错误中检测到潜在危险的 Request.Form 值。那是因为 lname 字段有 html 内容 lname="
测试
" - python - Python Folium MarkerCluster 颜色定制
- configuration - TempusDominus Bootstrap4 混合配置多个实例
- python - 在 Python 2.7 中将嵌套的 JSON 转换为 CSV
- android - ANR com.android.vending.billing.IInAppBillingService
- slurm - 如何使用 SLURM 提交并行作业步骤?