工作中,大部分文本都是\n分隔行,由\t分隔列的数据(其实就是一个 table)。一般都行python,awk来处理,顺便读取一个字段(就是table中的单元格)非常方便。C里没有直接提供字符串split的方法,我以前一直用strtok,但是它有一个问题,比如处理一个字符串“a1\tb2\t\tc4”,分割后是"a1""b2""c4",第三个空字段被略过了,这显然不是我们的预期(导致了列错乱)。之前也没有什么好办法,今天偶然看到一个函数,strsep说是现在基本用这个了,好奇之下,试了下,果然就解决之前的问题了。
#include <stdio.h> int main() { char str[100] = "a1\tb2\t\tc4" ; char *s = str; //char *p = strsep(&s, "\t"); char *p = strtok(s, "\t"); while(p){ printf("%s\n", p); p = strtok(NULL, "\t"); //p = strsep(&s, "\t"); } return 0; }
输出:
a1
b2
c4
#include <stdio.h> int main() { char str[100] = "a1\tb2\t\tc4" ; char *s = str; char *p = strsep(&s, "\t"); //char *p = strtok(s, "\t"); while(p){ printf("%s\n", p); //p = strtok(NULL, "\t"); p = strsep(&s, "\t"); } return 0; }
输出:
a1
b2
c4
另外我百度之,这个函数返回是char *的,tcc里有warning: assignment makes pointer from integer without a cast。gcc里倒是没试,有机会用到再看。
本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/1240277,如需转载请自行联系原作者