您的位置:首页 > 编程语言 > C语言/C++

C/C++中字符串切割(split)

2013-07-02 17:01 302 查看
工作中,大部分文本都是\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里倒是没试,有机会用到再看。

本文出自 “木又寸的技术博客” 博客,请务必保留此出处http://jianshusoft.blog.51cto.com/2380869/1240277
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: