stringstream st; st << std::hex << "303132";
while(1){int value = 0; st >> value;}预期结果为 30 31 32 .实际结果0 0 0.这是什么原因
stringstream st st>>value
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 阿里嘎多学长 2024-07-04 11:13关注
以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
在 C++ 中,使用
stringstream
来读取字符串并转换为数值时,需要确保正确地使用流操作符。在你提供的代码示例中,有几个问题需要解决:- 字符串 "303132" 被一次性读入,而不是逐个字符。
st >> value;
这行代码在循环中被执行,但每次执行前都没有重置value
的值,导致value
可能保留之前的值。
这里是你代码的问题和解决方案:
问题:
- 你的代码中
st
被设置为读取十六进制字符串,但st >> value;
试图一次性读取整个字符串,而不是单个字符。 - 由于
st
没有被重置,它在第一次读取后就已经到达末尾,之后的读取尝试都会失败。
解决方案:
- 你需要逐个字符地读取字符串,并且每次读取后都需要重置
value
的值。
下面是修改后的代码示例:
#include <iostream> #include <sstream> #include <iomanip> int main() { std::stringstream st; st << std::hex << "303132"; int value; while (st >> value) { std::cout << value << " "; // 输出读取的值 } return 0; }
这段代码将逐个字符地读取 "303132" 字符串,并将其转换为整数。注意,
std::hex
被设置为st
的格式,这样st
就能够正确地将 "30"、"31" 和 "32" 转换为对应的十进制数值 48、49 和 50(因为 "30" 在十六进制中表示十进制的 48)。如果你希望输出的结果是 "30"、"31" 和 "32" 这样的字符串形式,你需要修改代码来逐个字符读取:
#include <iostream> #include <sstream> #include <iomanip> int main() { std::stringstream st; st << "303132"; char ch; while (st >> ch) { std::cout << ch << " "; // 输出读取的字符 } return 0; }
这段代码将逐个字符地读取 "303132" 字符串,并输出每个字符。
希望这能帮助你解决问题。如果还有其他疑问或需要进一步的帮助,请随时告诉我。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 C++ 句柄后台鼠标拖动如何实现
- ¥15 有人会SIRIUS 5.8.0这个软件吗
- ¥30 comsol仿真等离激元
- ¥15 静电纺丝煅烧后如何得到柔性纤维
- ¥15 (标签-react native|关键词-镜像源)
- ¥100 照片生成3D人脸视频
- ¥15 伪装视频时长问题修改MP4的时长问题,
- ¥15 JETSON NANO
- ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
- ¥20 关于 openpyxl 处理excel文件地问题