例如,我的输入是“Tom,18”,对应于(字符串)名称,(int)年龄。
在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
当输入类别变得更多时,我发现这种方法并不方便。 有人能给我一些类似于scanf的想法,我可以这样做:
scanf("%s, %i",name,age) //when stdin is delimited by whitespace
谢谢!
答案 0 :(得分:2)
使用strtok将输入分解为令牌,然后进行适当处理。声明是:
char * strtok ( char * str, const char * delimiters );
所以它可能看起来像:
char *delim = " ,";
char *name = strtok(input, delim);
int age = atoi(strtok(NULL, delim));
注意:输入将被修改,因此不要使用const字符串。
答案 1 :(得分:1)
很少有人会将scanf
描述为“好的解析器”,但它有时会成功。如果要扫描字符串而不是流,请使用sscanf
。