切分 字符串指针数组(如环境变量) 的两种方法, 数组下标 和 指针

来源:互联网 发布:js控制span显示隐藏 编辑:程序博客网 时间:2024/06/05 00:40

题目:

有字符串数组如下:

        char *strs[] = { "Jan.=January", "Feb.=February", "Mar.=March","cut",           "Apr.=April", "May=May",   "Jun.=June","cut", "Jul.=July",  "Aug.=August",   "Sept.=September","cut", "Oct.=October",  "Nov.=November",  "Dec.=December", NULL};

         将它们按"cut"切分,并分别存入一个字符串指针数组的数组中,

如char *cuted[100][100]。

       结果如下
cutted[0][1] = "Jan.=January"
cutted[0][2] = "Feb.=February"
cutted[0][3] = "Mar.=March"
cutted[0][4] = NULL

cutted[1][1] = "Apr.=April"
cutted[1][2] = "May=May"
cutted[1][3] = "Jun.=June"
cutted[1][4] = NULL

cutted[2][1] = "Jul.=July"
cutted[2][2] = "Aug.=August"
cutted[2][3] = "Sept.=September"
cutted[2][4] = NULL

cutted[3][1] = "Oct.=October"
cutted[3][2] = "Nov.=November"
cutted[3][3] = "Dec.=December"
cutted[3][4] = NULL

cutted[4][0] = NULL


用下标直观,容易理解;

但是如果你能用指针解决这个问题的话,那么你对指针的理解会更加深入!


/******************************************************** * @author  Airead Fan <fgh1987168@gmail.com>* * @date    2011 9月 10 16:52:09 CST* ******************************************************** *after studying C 54 days* *after studying APUE 19 days* ********************************************************/#include <stdio.h>#include <string.h>#if 0一月份=JAN.      Jan.=January二月份=FEB.      Feb.=February三月份=MAR.      Mar.=March 四月份=APR.      Apr.=April 五月份=MAY       May=May六月份=JUN.      Jun.=June七月份=JUL.      Jul.=July八月份=AUG.      Aug.=August 九月份=SEP.      Sept.=September十月份=OCT.      Oct.=October十一月份=NOV.    Nov.=November十二月份=DEC.    Dec.=December   #endifint main(int argc, char *argv[]){char *strs[] = { "Jan.=January", "Feb.=February", "Mar.=March", "cut", "Apr.=April", "May=May",    "Jun.=June",   "cut", "Jul.=July",   "Aug.=August",    "Sept.=September",  "cut", "Oct.=October",   "Nov.=November",   "Dec.=December", NULL};fprintf(stdout, "-------------------------show string-------------------------\n");char **p;p = strs;while(*p != NULL && p != NULL){fprintf(stdout, "%s\n", *p);p++;}fprintf(stdout, "-------------------------attempt to split-------------------------\n");p = strs;while(*p != NULL && p != NULL){if(strcmp(*p, "cut") == 0){fprintf(stdout, "(null)\n");}else{fprintf(stdout, "%s\n", *p);}p++;}#if 0fprintf(stdout, "-------------------------split and store witd subnum-------------------------\n");char *cuted[100][100];int i;int j;int count;i = 0; p = strs; count = 0;while(*p != NULL && p != NULL){j = 0;while(*p != NULL && strcmp(*p, "cut") != 0){cuted[i][j++] = *p;p++;}i++;count ++;if(*p != NULL){*p++ = NULL;}}cuted[i][0] = NULL;fprintf(stdout, "count = %d\n", count);for(i = 0; i < count; i++){j = 0;while(cuted[i][j] != NULL)fprintf(stdout, "[%d]%s\n", i, cuted[i][j++]);}#endiffprintf(stdout, "-------------------------split and store with pointer-------------------------\n");char *cuted[100][100];int i;char *((*q)[100]);char **s;i = 0; p = strs;  q = cuted;while(*p != NULL && p != NULL){s = *q;while(*p != NULL && strcmp(*p, "cut") != 0){*s++ = *p;p++;}q++;if(*p != NULL){*p++ = NULL;}}*q[0] = NULL;q = cuted; i = 0;while(*q[0] != NULL){s = *q;while(*s != NULL){fprintf(stdout, "[%d]%s\n", i, *s);s++;}i++;q++;}return 0;}



原创粉丝点击