我有一个std :: string,我想迭代它,基本上变成一个int值流,表示每个字符的ascii值。
我的问题是转义字符。例如“\ n”。
std::string str = "hello\nhello";
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] = '\0';
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
答案 0 :(得分:3)
问题是这段代码只将“\ 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
答案 1 :(得分:1)
不,"\n"
将被视为单个char
(0x0a)。如果您想要两个char
使用"\\n"
。
答案 2 :(得分:1)
在你的修改过的问题中,很明显你的输入字符串确实包含两个单独的字符。
(问题的原始版本不是这种情况。)
所以你必须自己解决它们,扫描一个'\\'
字符,然后(取决于下一个字符是什么),用所需的元字符替换它。
更改您需要更改的任何设置以使输入字符串实际包含'\n'
字符,而不是后跟'n'
的反斜杠会更容易