实现类似JAVA编程语言中split函数: (这里以空格为分隔符进行演示)
- 函数的声明:void split(char *src,const char *separator,char **dest,int *num) {}
- 变量:
1.*src:要进行分割的字符串地址,
2.*separator:分隔符,设置为常量字符串,这里的分隔符可以为字符串,
3.**dest:分割结束后数据存储的地址,二维数组,
4.*num:返回的是字符串中存在的分隔符的数量。 - 返回值:这个函数既可以返回分割之后的数组,又可以返回分隔符的数量。 这里使用的是指针的方式返回,修改的是原数据省去了返回这个环节, 当然也可以使用结构体的方式返回。
#include <stdio.h>
#include <string.h>
void split(char *src,const char *separator,char **dest,int *num) {
char *pNext;
//记录分隔符数量
int count = 0;
//原字符串为空
if (src == NULL || strlen(src) == 0)
return;
//未输入分隔符
if (separator == NULL || strlen(separator) == 0)
return;
/*
c语言string库中函数,
声明:
char *strtok(char *str, const char *delim)
参数:
str -- 要被分解成一组小字符串的字符串。
delim -- 包含分隔符的 C 字符串。
返回值:
该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。
*/
char *strtok(char *str, const char *delim);
//获得第一个由分隔符分割的字符串
pNext = strtok(src,separator);
while(pNext != NULL) {
//存入到目的字符串数组中
*dest++ = pNext;
++count;
/*
strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。
当strtok()在参数s的字符串中发现参数delim中包涵的分割字符时,则会将该字符改为\0 字符。
在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。
每次调用成功则返回指向被分割出片段的指针。
*/
pNext = strtok(NULL,separator);
}
*num = count;
}
//将一串以空格为分割线的字符串分开,数据存到一个二维数组中去
int main(){
char str[100];
char *p[10]={0};
int num=0,i;
gets(str);
//attention!!!!! 这里的分隔符已定要写为字符串的形式。
split(str," ",p,&num);
for(i = 0;i < num; i ++) {
printf("%s\n",p[i]);
}
return 0;
}
程序运行结果