/* 题目55: 有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";),要求写一个函数(接口),输出以下结果 1) 以逗号分割字符串,形成二维数组,并把结果传出; 2) 把二维数组行数运算结果也传出。 strchr(“aa,aa”,’,’ ); 请自己定义一个接口(函数)。 要求1:能正确表达功能的要求,定义出接口(函数)(30分); 要求2:正确实现接口(函数),并实现功能(40分); 要求3:编写正确的测试用例。(30分)。 */ //解析字符串 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> //删除空格 int removespace(const char *pin, char *pout); //解析字符串 int analysistr(const char *pin, char bufstr[8][20], char *requirc); //打印字符数组 int printfarr09(char parr[8][20]); void main(){ //原始字符串(非‘,‘结尾) const char *p = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,werertw"; //原始字符串(‘,‘结尾) const char *p2 = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,"; //新字符串数组 char bufstr[8][20] = {0}; //新字符串数组 char bufstr2[8][20] = { 0 }; //定义以何种字符作为截取字符 char ch = ‘,‘; analysistr(p, bufstr, &ch); analysistr(p2, bufstr2, &ch); //打印新字符数组 printfarr09(bufstr); system("pause"); } //打印二维数组 int printfarr09(char parr[8][20]){ int ERRO_MSG = 0; if (parr == NULL) { ERRO_MSG = 1; printf("parr==NULL erro msg:%d", ERRO_MSG); return ERRO_MSG; } //打印二维数组 for (int i = 0; i < 8; i++) { printf("%s\n", parr[i]); } return ERRO_MSG; } //删除空格 int removespace(const char *pin, char *pout){ int ERRO_MSG = 0; if (pin == NULL) { ERRO_MSG = 1; printf("pin==NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } if (pout == NULL) { ERRO_MSG = 2; printf("pout==NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } while (*pin != ‘\0‘){ if (*pin != ‘ ‘) { *pout++ = *pin; } pin++; } return ERRO_MSG; } //解析字符串 int analysistr(const char *pin, char bufstr[8][20], char *requirc){ int ERRO_MSG = 0; if (pin == NULL) { ERRO_MSG = 1; printf("pin==NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } if (bufstr == NULL) { ERRO_MSG = 2; printf("bufstr==NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } if (requirc == NULL) { ERRO_MSG = 3; printf("requirc==NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } //分解字符串 //strchr函数原型:extern char *strchr(const char *s,char c);查找字符串s中首次出现字符c的位置。 const char *p = pin; const char *ptmp = pin; //新字符串个数计数 int ncount = 0; int res = 0; //临时存储一段字符串 char strt[20] = { 0 }; //用来删除strt中的空格 char strt2[20] = { 0 }; while (p != ‘\0‘){ /*memset是计算机中C / C++语言函数。 将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定, 这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。*/ //清除字符串缓存,每次循环都会产生字符串缓存 memset(strt, 0, sizeof(strt)); memset(strt2, 0, sizeof(strt2)); p = strchr(p, *requirc); if (p == NULL) { //处理‘,‘不作为最后一个符的情况 //没有找到字符,那么将剩下的所有字符当作一个新字符串 strcpy(strt, ptmp); //删除字符串中的空格 res = removespace(strt, strt2); if (res) { ERRO_MSG = 4; printf("删除空格fuc报错 erro msg:%d", ERRO_MSG); return ERRO_MSG; } //处理‘,‘作为最后一个符的情况 if (strlen(strt2)>1) { //将新字符串拷贝到数组里 strcpy(bufstr[ncount], strt2); } break; } else{ //此时ptmp在开头,p指针在字符‘,‘第一次出现的地方 strncpy(strt, ptmp, p - ptmp); //删除字符串中的空格 res = removespace(strt, strt2); if (res) { ERRO_MSG = 4; printf("删除空格fuc报错 erro msg:%d", ERRO_MSG); return ERRO_MSG; } if (strlen(strt2)>1) { //将新字符串拷贝到数组里 strcpy(bufstr[ncount], strt2); ncount++; } //重新初始化指针 ptmp = p = p + 1; } } return ERRO_MSG; }
原文:http://www.cnblogs.com/zhanggaofeng/p/5315603.html