将带有转义序列的std::字符串转换为ascii值
Converting std::string with escape sequence to ascii values
我有一个std::字符串,我想迭代它,基本上把它变成一个int值流,表示每个字符的ascii值。
我的问题是转义字符。例如"\n"。
std::string str = "hellonhello";
for (char c : str) {
int asciiVal = static_cast<int>(c);
// now do something with val. but what about the escape sequence?
}
问题是,这段代码只是将"\n"视为两个独立的字符。
更新:
这是一个真正的问题。是的,它不会发生在普通的c++代码中,而是发生在包含c/c++摘录的.lex文件中。这是真实的代码和输出:
代码:.lex文件
char *c = yytext;
c[yyleng-1] = ' ';
c++;
std::string str = c;
cout << "MY STRING: '" << str << "'" << endl;
for (char c : str) {
int val = static_cast<int>(c);
std::cout << to_string(val) << std::endl;
}
输出:
MY STRING: 'n'
92
110
问题是,该代码只是处理";\n〃;作为两个单独的字符。
有什么帮助吗?
不,没有。转义符和普通字符一样存储,所以n
将和a
或b
一样被处理。
http://www.cplusplus.com/doc/tutorial/ntcs/
您可以通过打印asciiVal
进行验证。在您的情况下,输出为:
104 // h
101 // e
108 // l
108 // l
111 // o
10 // n
104 // h
101 // e
108 // l
108 // l
111 // o
否,"n"
将被视为单个char
(0x0a)。如果您想要两个char
,请使用"\n"
。
在您修改后的问题中,很明显,您的输入字符串实际上包含两个单独的字符。
(问题的原始版本并非如此。)
因此,您必须自己解决这些问题,方法是扫描''
字符,然后(取决于下一个字符是什么),将其替换为所需的元字符。
更改任何需要更改的设置都会容易得多,以使输入字符串实际上包含'n'
字符,而不是后面跟着'n'
的反斜杠。
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组