我尝试用c ++做一个解释器,我想做一个函数,当用户输入类型(a)时,它会给变量类型a a int或bool或string。所以我的问题是我想知道前五个字母是否是类型(这是我认为最好的解决方案,以便做我想要的。但我的问题是如何以我在下面做的另一种方式做到这一点,因为这是一个非常难看!
if (str.at(0) == 't' && str.at(1) == 'y' && str.at(2) == 'p' && str.at(3) == 'e' && str.at(4) == '(' )
答案 0 :(得分:0)
您问题的直接答案可能是使用std::string::compare
或std::string::find
;我认为使用术语“c ++ string start with”的谷歌搜索将直接带给你有优势和劣势的例子。
但是,在编写非常简单的解析器时,来自c的字符串库的标记化器strtok
可能是一种更简单的方法。 strtok
随后将字符串拆分为标记,每次调用strtok
都会返回下一个标记。分隔标记的字符作为参数传递给strtok
:
#include <iostream>
#include<stdio.h>
#include <stdlib.h>
int main()
{
std::string str = "type(a)";
if (str.compare(0,5,"type(") == 0) {
// string starts exactly with `type(`;
// note: 'type (' would not match...
}
char* analyzeStr = strdup(str.c_str());
char *token = strtok(analyzeStr, "(");
if (token && strncmp(token, "type", strlen("type")) == 0) {
// command starts with "type(" or "type ("
token = strtok(NULL, ")");
if (token) {
// value between brackets
printf("analyzing type of '%s'", token);
}
}
free(analyzeStr);
return 0;
}