- 论坛徽章:
- 0
|
用glib库应该能实现这个要求,先占个位,有时间补上代码!
- /*
- * split.c
- * 利用glib库实现的 split 函数功能
- * veking
- * 2008-07-11
- */
- #include <stdio.h>
- #include <glib.h>
- GPtrArray *split(char *s, const char *t, size_t n);
- int main(void)
- {
- int i;
- char *str = "one,two,three,monday,sunday";
- GPtrArray *arr = g_ptr_array_new();
- arr = split(str, ",", 32);
- for(i = 0; i < arr->len; i++){
- fprintf(stdout, "item[%d]: %s\n", i, g_ptr_array_index(arr, i));
- }
- g_ptr_array_free(arr, TRUE);
- return 0;
- }
- /*
- * split
- * s 是要进行分割的字符串,分割后值被改变,如果不想改变其值,请自行修改
- * t 是字符串的分隔符号
- * n 是数组元素的缓冲区大小
- */
- GPtrArray *split(char *s, const char *t, size_t n)
- {
- GPtrArray *a = g_ptr_array_new();
- char *p = NULL;
- char *buf = NULL;
- buf = (char *)malloc(n);
- if(!buf){
- fprintf(stderr, "malloc error!\n");
- exit(1);
- }
- while((p = strpbrk(s, t))){
- strncpy(buf, s, p - s);
- g_ptr_array_add(a, strdup(buf));
- s += p - s + strlen(t);
- memset(buf, 0, sizeof(buf));
- }
- if(s)
- g_ptr_array_add(a, strdup(s));
- free(buf);
- return a;
- }
复制代码
编译命令:
gcc `pkg-config --cflags --libs glib-2.0` -o split split.c
执行结果:
item[0]: one
item[1]: two
item[2]: three
item[3]: monday
item[4]: sunday
[ 本帖最后由 veking 于 2008-7-11 22:54 编辑 ] |
|