我有一个文本文件如下:
id name area dist
1 surya kumar 1 2
当我尝试使用带空格作为分隔符的strtok()函数在C中解析此行时,我得到如下输出:
1
surya
Kumar
1
2
第二个字段实际上是一个名称,因此它可以包含多个空格。有没有办法将第二个字段作为一个整体来处理,仍然可以解析整个行?
答案 0 :(得分:0)
在调用strtok之前,计算字符串中的空格数,以便知道第3个字段的起始位置(即第二个字段的结束位置)。
答案 1 :(得分:0)
由于您的名字可能包含数字,我建议计算代币。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXFIELDS 10
int main(void) {
//char input[] = "1 Ludwig 2 3";
char input[] = "1 Ludwig 99 Beethoven 2 3";
char *token[MAXFIELDS];
char *tok;
char name [100];
int fields, index;
int id, area, dist;
fields = 0;
tok = strtok(input, " ");
while(tok != NULL) {
if (fields >= MAXFIELDS)
return 1; // error
token[fields++] = tok;
tok = strtok(NULL, " ");
}
if (fields < 4)
return 1; // error
index = 0;
id = atoi(token[index++]); // id field
strcpy(name, token[index++]); // name field
while(index < fields - 2) {
strcat(name, " "); // append to name
strcat(name, token[index++]);
}
area = atoi(token[index++]); // area field
dist = atoi(token[index++]); // dist field
printf("%d, %s, %d, %d\n", id, name, area, dist);
return 0;
}
节目输出
1, Ludwig 99 Beethoven, 2, 3