C语言 百炼成钢19

时间:2021-12-09 09:31:08
/*
题目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[][], char *requirc); //打印字符数组
int printfarr09(char parr[][]); void main(){
//原始字符串(非','结尾)
const char *p = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,werertw";
//原始字符串(','结尾)
const char *p2 = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,";
//新字符串数组
char bufstr[][] = {};
//新字符串数组
char bufstr2[][] = { };
//定义以何种字符作为截取字符
char ch = ',';
analysistr(p, bufstr, &ch);
analysistr(p2, bufstr2, &ch);
//打印新字符数组
printfarr09(bufstr);
system("pause");
} //打印二维数组
int printfarr09(char parr[][]){
int ERRO_MSG = ;
if (parr == NULL)
{
ERRO_MSG = ;
printf("parr==NULL erro msg:%d", ERRO_MSG);
return ERRO_MSG;
}
//打印二维数组
for (int i = ; i < ; i++)
{
printf("%s\n", parr[i]);
}
return ERRO_MSG;
} //删除空格
int removespace(const char *pin, char *pout){
int ERRO_MSG = ;
if (pin == NULL)
{
ERRO_MSG = ;
printf("pin==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (pout == NULL)
{
ERRO_MSG = ;
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[][], char *requirc){
int ERRO_MSG = ;
if (pin == NULL)
{
ERRO_MSG = ;
printf("pin==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (bufstr == NULL)
{
ERRO_MSG = ;
printf("bufstr==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (requirc == NULL)
{
ERRO_MSG = ;
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 = ;
int res = ;
//临时存储一段字符串
char strt[] = { };
//用来删除strt中的空格
char strt2[] = { };
while (p != '\0'){
/*memset是计算机中C / C++语言函数。
将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,
第一个值为指定的内存地址,块的大小由第三个参数指定,
这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。*/
//清除字符串缓存,每次循环都会产生字符串缓存
memset(strt, , sizeof(strt));
memset(strt2, , sizeof(strt2));
p = strchr(p, *requirc);
if (p == NULL)
{
//处理','不作为最后一个符的情况
//没有找到字符,那么将剩下的所有字符当作一个新字符串
strcpy(strt, ptmp);
//删除字符串中的空格
res = removespace(strt, strt2);
if (res)
{
ERRO_MSG = ;
printf("删除空格fuc报错 erro msg:%d", ERRO_MSG);
return ERRO_MSG;
}
//处理','作为最后一个符的情况
if (strlen(strt2)>)
{
//将新字符串拷贝到数组里
strcpy(bufstr[ncount], strt2);
}
break;
}
else{
//此时ptmp在开头,p指针在字符','第一次出现的地方
strncpy(strt, ptmp, p - ptmp);
//删除字符串中的空格
res = removespace(strt, strt2);
if (res)
{
ERRO_MSG = ;
printf("删除空格fuc报错 erro msg:%d", ERRO_MSG);
return ERRO_MSG;
}
if (strlen(strt2)>)
{
//将新字符串拷贝到数组里
strcpy(bufstr[ncount], strt2);
ncount++;
}
//重新初始化指针
ptmp = p = p + ;
}
}
return ERRO_MSG;
}

C语言 百炼成钢19