【发布时间】:2020-08-23 07:40:07
【问题描述】:
我正在尝试从文件的每一行中分离标记并打印它们。我使用的分隔符是“,”。但是,某些行的最后一个字符串在字符串中具有带有“,”的标记。如何获取带有“,”的整个字符串?
char *buff = (char*)malloc(sizeof(char)*256);
char *tmp;
while (fgets(buff, 256, FILENAME) != NULL) {
tmp = strtok(buff, ",");
printf("%s\n",tmp);
tmp = strtok(NULL, ",");
printf("%s\n",tmp);
tmp = strtok(NULL, ",");
printf("%s\n",tmp);
}
输入文件中的行如下所示:
This,is,a
Code,in,"c,language"
rat, mouse, "rat, mouse"
我正在尝试这样的输出:
This
is
a
Code
in
c, language
rat
mouse
rat, mouse
【问题讨论】:
-
要标记的字符串是否需要双引号?这有助于找到解决方案。
-
不,只需要去掉每行最后一个标记中可能存在的双引号
-
逐个字符遍历字符串...当您找到逗号时,逗号之前的内容是标记;当您找到报价时,开始在报价内进行子搜索,直到找到匹配的报价。
-
@ReajuddinRabbi 写一个正确的解析器来正确解析
",strtok在这里是错误的方式。 -
Code,in,"c,language"导致c, language?c和language之间的逗号从何而来?