这可能是一个愚蠢的问题但是我坚持这个。
我正在编译器上做作业。我必须匹配一个字符文字。它被定义为用'所包含的任何单个字符。 ',除了' \ t',' \ n',' \ a'在我的lex文件中,我编写了一个匹配它的模式。当模式匹配输入时,它将其存储在yytext中。现在yytext在char指针中。它将价值吸引为' \ t'。 (4个个人字符)。但是我在符号表中保存了这个字符的ascii值。我正在努力解决这个问题。
我有以下的char指针。
char *yytext = new char[5];
*(yytext + 0) = '\'';
*(yytext + 1) = '\\';
*(yytext + 2) = 't';
*(yytext + 3) = '\'';
*(yytext + 4) = '\0';
cout << yytext << endl; // prints '\t'
现在我想要做的就是获得&#39; \ t&#39;单个字符中的ascii字符。类似的东西:
char ch = '\t';
我该怎么做?我可以用蛮力的方法做到这一点,但有没有简单明了的方法来实现这个目标?
答案 0 :(得分:1)
但是我如何以简单的方式从char指针解析它呢?
使用map,其中key是字符串,值是对应的char:
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
std::unordered_map<std::string, char> convert = { {"'\t'", '\t'},{ "'\n'", '\n' },{ "'\r'", '\r' } };
const char *ch1 = "'\t'";
const char *ch2 = "'\n'";
std::cout << 1 << convert[ch1] << 2 << convert[ch2] << 3 << std::endl;
return 0;
}
工作演示:https://ideone.com/rsSKXL
1 2
3