一个好的c解析器?

一个好的c解析器?,c,parsing,scanf,delimiter,C,Parsing,Scanf,Delimiter,例如,我的输入是Tom,18,对应于字符串name,int age 在c/c++中,我所做的是: char name[100] = { 0 }; char age[4] = { 0 }; //define all variables as char before parsing char string[100] = { 0 }; const char delims[] = ","; //define delimiter char *s = string; //pointer to string

例如,我的输入是Tom,18,对应于字符串name,int age

在c/c++中,我所做的是:

char name[100] = { 0 };
char age[4] = { 0 }; //define all variables as char before parsing

char string[100] = { 0 };
const char delims[] = ","; //define delimiter
char *s = string; //pointer to string[0]

int txt_len = strcspn(s, delims); //find length between ','
for (int i = 0; i < txt_len; i++) {
    name[i] = *s; //assign to char[]
    s++; //move pointer
}
s++; //move pointer at ','

//do the same for age
txt_len = strcspn(s, delims);
for (int i = 0; i < txt_len; i++) {
    age[i] = *s;
    s++;
}
s++;
int age1 = atoi(age); //convert to int
谢谢

用于将输入分解为令牌,然后进行适当的处理。宣言是:

char * strtok ( char * str, const char * delimiters );
所以它可能看起来像:

char *delim = " ,";
char *name = strtok(input, delim);
int age = atoi(strtok(NULL, delim));

注意:输入将被修改,所以不要使用const字符串。

很少有人会将scanf描述为一个好的解析器,但它有时会起作用。如果要扫描字符串而不是流,请使用。

c/c++不是一种语言。看起来您使用的是C语言习惯用法,但是代码是如何编译的?选择一种语言,而不是两种。如果在这样的问题上同时使用这两个选项,你会被否决。为什么不能使用scanf?1。这里没有任何东西在任何方面类似于解析器。2.不能使用C字符串函数编写解析器。3.你甚至不能用它们写很多扫描仪。不知道为什么这个问题被解决了。有很多这样的解析方法。正如您所发现的,临时解决方案非常混乱。一个好的通用解决方案是用空格或其他分隔符分隔一行文本,然后对生成的单词进行操作;进行拆分的一个标准功能是strtok。有时候sscanf而不是scanf是完美的——事实上它可能就在这里。为什么不能使用它?或者甚至不能使用“解析器”:-|因此,在字符串的输入中,将“,”替换为“”,然后从字符串中使用sscanf,对吗?@darth:在你的问题中,你问了如何从字符串中等效扫描%s、%d、name和age,答案是sscanfs、%s、%d、name和age。如果那是你想要的,那就是答案。
char *delim = " ,";
char *name = strtok(input, delim);
int age = atoi(strtok(NULL, delim));