上下文
从输入文件中读取数字作为std::string
并将其转换为double
。
我的解决方案
根据我在网上能找到的内容,我尝试了各种方法:
std::string str = "‐12.5799";
std::cout << str << std::endl;
double d;
std::stringstream(str) >> d;
std::cout << d << std::endl;
std::cout << atof(str.c_str()) << std::endl;
std::cout << stod(str) << std::endl;
问题
当从文件中读取正数时,它似乎工作得很好,但当出现符号"时,会导致奇怪的错误和异常-"在CCD_ 3。
输出:
‐12.5799
0
0
stod
我显然错过了什么?
这不是一个普通的ASCII连字符/减号字符。
相反,它是以下代码点序列:
- U+00AD:SOFT HYPHEN[SHY]{任意连字符}
- U+2010:连字符
因此,您的解析尝试失败。
如果有疑问,请将文本复制/粘贴到十六进制编辑器或在线工具中,如https://babelstone.co.uk/Unicode/whatisit.html.
如果遇到连字符(伴随着无数视觉上相似但不同的字符(等字符的神秘问题,请始终将此视为调试步骤。
所谓的";"聪明";引号是另一个很好的例子,说明人物远没有他们声称的那么无辜。