如何在C中解析此输入

时间:2009-11-09 22:02:41

标签: c

现在我正在进行一项任务,但发现用C语言解析用户输入非常困难。这是用户输入的一种输入。

INSERT Alice, 25 Norway Drive, Fitzerald, GA, 40204, 6000.60

这里INSERT是命令(进入链接列表)
爱丽丝是一个名字 25 Norway Drive是一个地址
Fitzerald是一个城市 GA是一个州 40204是邮政编码
6000.60是余额

如何在C中使用scanf或任何其他方法正确地将其作为输入?我面前的最大问题是如何忽略这些“,”并将这些值存储在适当数据类型的单独变量中。

谢谢大家,我已经解决了问题,这是解决方案:

   pch = strtok(NULL, ","); pch =
        substr(pch, 2, strlen(pch));  //substr is my custom funcition and i believe you can tell by its name what it is doing.
        strcpy(customer->streetAddress, pch);

3 个答案:

答案 0 :(得分:4)

快速简便的方法:

使用fgets()从用户处获取字符串;
strtok()标记它。

修改
看完你的评论后:

仅使用逗号strtok(),然后从结果中删除尾随和前导空格。

EDIT2
测试运行后,我注意到你将获得“INSERT Alice”作为第一个令牌。因此,在提取所有令牌之后,再次运行strtok(),这次使用空格,在提取的第一个令牌上。或者,找到空格,以某种方式从那里识别命令和名称。

答案 1 :(得分:1)

如果你的输入数据格式是固定的,你可以使用[s] scanf()快速而肮脏地使用。

输入:

INSERT Alice, 25 Norway Drive, Fitzerald, GA, 40204, 6000.60

如果从stdin读取,你可以尝试:

char name[80], addr[80], city[80], state[80];
int zip;
double amt;

int res = scanf("INSERT %[^,], %[^,], %[^,], %[^,], %d, %f\n",
    &name, &addr, &city, &state, &zip, &amt);

应返回匹配的项目数(即6)。

答案 2 :(得分:0)

假设可以使用具有不同参数的不同命令,

scanf()在这种情况下可能有点棘手。我可能会先使用fgets()读取字符串,然后使用strtok()来读取第一个令牌(命令)。此时,您可以继续使用strtok()和“,”作为分隔符来读取字符串中的其余标记,或者您可以在字符串的其余部分使用sscanf()(现在你知道其余输入的格式。 sscanf()仍然会很痛苦,因为在地址和可能的城镇地区中似乎允许有不确定数量的空格。