您的位置:首页 > 编程语言 > C语言/C++

C语言 百炼成钢19

2016-03-24 15:07 453 查看
/*
题目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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: