字符串函数包C语言课程设计报告+源 代码文档格式.docx
《字符串函数包C语言课程设计报告+源 代码文档格式.docx》由会员分享,可在线阅读,更多相关《字符串函数包C语言课程设计报告+源 代码文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
函数、参数、返回值、返回值类型、参数类型。
课程设计任务书
设计题目:
字符串函数包
学生姓名
课程名称
程序设计基础课程设计
专业班级
地点
I305/I306
起止时间
2012年1月9日~1月13日
请设计一个字符串函数包,实现常用的字符、字符串处理函数。
要求在设计该函数包的时候只能使用以下6个函数:
scanf,printf,putc,getc,puts和gets。
你设计的字符串函数包须实现以下功能:
isAlpha判别一个字符是否是英文字母;
isDigit判别一个字符是否是数字字符;
my_strcmp字符串比较;
my_strncmp字符串前n个字符的比较;
my_strcpy字符串复制;
my_strncpy字符串前n个字符的复制;
my_strcat字符串拼接;
my_strncat字符串前n个字符的拼接;
my_strlen字符串中实际字符的技术;
my_itoa整数转换到字符串;
my_itof浮点数转换成字符串;
my_strtoi字符串A转换成整数B(10进制、8进制、16进制和2进制);
my_strlow把字符串A中的大写字母转换成小写字母;
my_strupr把字符串A中的小写字母转换成大写字母;
my_strstrcount统计字符串A中指定的某子串B出现的次数;
my_strstr统计字符串A中指定的某子串B出现的首位置;
my_strptr判别字符串A中是否存在字符串B中的字符,如果有返回位置指针,否则返回NULL指针;
然后设计一个综合性的例子验证你设计的这些函数;
并把得到的结果和string.h中的函数做比较。
【题目要求】
(1)要求你的综合性例子中使用的数据应该从文件或标准输入设备中读取到字符串或字符或字符数组中;
(2)要求以上功能分别用函数和指针实现。
并要求用C语言的文件操作语句将以上所有结果保存在文件XX.out。
【输入/输出要求】
(1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。
进入每个操作后,根据程序的提示输入相应的信息;
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。
设计
参数
(1)系统分析、设计正确。
(2)结果以图表方式显示。
(3)界面简洁、美观。
(4)报告格式规范。
周一:
明确设计任务,学习相关基础知识
周二:
熟悉各知识点,进行基础练习
周三:
根据题目要求,进行设计和实现
周四:
周五:
撰写报告,进行答辩
参考资料
[1]何钦铭颜晖.《C语言程序设计》.高等教育出版社.2008年
[2]谭浩强张基温.《C语言程序设计教程》.高等教育出版社.2006年
其它
说明
1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
教研室主任:
指导教师:
2012年1月1日
摘要……………………………………………………………………………………2
课程设计任务书………………………………………………………………………3
第一章函数包需求分析说明………………………………………………………6
第二章函数包的实现……………………………………………………………………8
第三章函数包的测试……………………………………………………………………17
第四章函数包的使用说明………………………………………………………………19
附录程序代码………………………………………………………………………………20
第一章函数包的需求分析
函数包中包括如下十七个函数:
1.判别一个字符是否是英文字母isAlpha;
该函数只需在调用时传入一个字符,函数将返回该字符是不是英文字母。
2.判别一个字符是否是数字字符isDigit;
该函数只需在调用时传入一个字符,函数将返回该字符是不是数字字符。
3.字符串比较my_strcmp;
该函数在调用时传入两个字符串,函数会返回一个整数类型的值,
把值输出来,如果值为正的,则第一个字符串大,如果值为负的,
则第一个字符串就小,否则,两个字符串相等。
4.字符串前n个字符的比较my_strncmp;
该函数在调用时需传入两个字符串和一个整数N,N是指这两个
字符串的前N个字符,也就是说只比较这两个字符串的前N个字符,
函数会返回一个整数类型的值,把值输出来,如果值为正的,则第一个字符串大,如果值为负的,则第一个字符串就小,否则,两个字符串相等。
5.字符串复制my_strcpy;
该函数在调用时传入一个字符数组和一个字符串,这个字符数组的大小至少要比字符串的字符个数多一个,用来放结束字符,当程序运行完之后这个字符串就被复制在字符数组当中了。
6字符串前n个字符的复制.my_strncpy;
该函数在调用时传入一个字符数组、一个字符串和一个整数N,这个字符数组的大小至少要比N大一,用来放结束字符,当程序运行完之后这个字符串中的前N个字符就被复制在字符数组当中了。
7.字符串拼接my_strcat;
该函数在调用时传入一个被初始化的字符数组和一个字符串,字符数组剩余的字符个数至少要比字符串的字符个数多一个,用来放结束字符,当程序运行完之后
字符串就被拼接在字符数组的后面。
8.字符串前n个字符的拼接my_strncat;
该函数在调用时传入一个被初始化的字符数组、一个字符串和一个整数N,字符数组剩余的字符个数至少要比N大一,用来放结束字符,当程序运行完之后
字符串的前N个字符就被拼接在字符数组的后面。
9.字符串中实际字符的技术my_strlen;
该函数在调用时传入一个字符串,函数会返回一个整数,这个整数就为该字符串的个数。
10.整数转换到字符串my_itoa;
该函数在调用时传入一个整数,函数会返回该整数的字符串形式。
11.浮点数转换成字符串my_itof;
该函数在调用时传入一个浮点数,函数将返回该浮点数的字符串形式。
12.字符串A转换成整数B(10进制、8进制、16进制和2进制)my_strtoi;
该函数在调用时需传入一个字符串,先将这个字符串转换成十进制的整数,通过十进制先后转换成八进制、十六进制和二进制。
13.把字符串A中的大写字母转换成小写字母my_strlow;
该函数在调用时需传入一个字符串,当程序运行完之后,函数将返回一个字符串,返回的字符串中字母都为小写的。
14.把字符串A中的小写字母转换成大写字母my_strupr;
该函数在调用时需传入一个字符串,当程序运行完之后,函数将返回一个字符串,返回的字符串中字母都为小写的。
15.统计字符串A中指定的某子串B出现的次数my_strstrcount;
该函数在调用时需传入两个字符串,第一个字符串中字符的个数一定要比第二个字符串中的字符个数多或者等于,当程序运行完之后,函数将返回一个整数,这个整数就是第二个字符串在第一个字符串中出现的次数。
16.统计字符串A中指定的某子串B出现的首位置my_strstr;
该函数在调用时需传入两个字符串,第一个字符串中字符的个数一定要比第二个字符串中的字符个数多或者等于,当程序运行完之后,函数将返回一个字符串,这个字符串就是第二个字符串在第一个字符串首次出现的位置。
17.判别字符串A中是否存在字符串B中的字符,如果有返回位置指针,否则返回NULL指针my_strptr;
该函数在调用时需传入两个字符串,当程序运行完之后,函数将返回一个字符串或者空指针,如果返回的是一个字符串,则就是第一个字符串中存在第二个字符串中的某个字符,且返回的字符串的首位置就为该字符在第一个字符串中的位置。
第二章函数包的实现
函数涉及到核心功能模块进行设计实现,并对关键代码进行分析阐述。
第一个函数:
voidisAlpha(charch)
{
if((ch>
='
a'
&
ch<
z'
)||(ch>
A'
Z'
))
printf("
该字符是英文字母。
\n"
);
else
该字符不是英文字母。
}
当字符传入函数之后时,判断该字符是不是在’a’到’z’与’A’到’Z’之间,如果在,则该字符是英文字母;
否则,该字符不是英文字母。
第二个函数:
voidisDigit(charch)
if(ch>
0'
9'
)
该字符是数字字符。
该字符不是数字字符。
当字符传入函数之后时,判断该字符是不是在’0’到’9’之间,如果在,则该字符是数字字符;
否则,该字符不是数字字符。
第三个函数:
intmy_strcmp(char*ch1,char*ch2)
inti=0,j=0,k=0;
do
{
j=ch1[i++]-ch2[k++];
}while(j==0&
(ch1[i]!
\0'
||ch2[k]!
));
returnj;
当参数传进来之后,两个字符串的首个字符相比较,如果比较结果为相等且两个字符串都没有到结束,则循环一次,两个字符串的第二个字符相比较,再判断,这样一直执行下去,直到判断结果不相等,或者两个字符串中的某个字符串到结尾了,或者两个字符串都到结尾了。
第四个函数:
intmy_strncmp(char*ch1,char*ch2,intn)
)&
((--n)!
=0));
当参数传进来之后,两个字符串的首个字符相比较,如果比较结果为相等且两个字符串都没有到结束,则循环一次,两个字符串的第二个字符相比较,再判断,这样一直执行下去,直到判断结果不相等,或者比到我们要求的位置,或者两个字符串中的某个字符串到结尾了,或者两个字符串都到结尾了。
第五个函数:
char*my_strcpy(char*ch1,char*ch2)
inti;
for(i=0;
ch2[i]!
;
i++)
ch1[i]=ch2[i];
}
ch1[i]='
returnch1;
当参数传进函数之后,函数会将第二个字符串中的每个字符复制到第一个字符数组当中,再给第一个字符串最后加个结束字符。
第六个函数:
char*my_strncpy(char*ch1,char*ch2,intn)
i<
n&
当参数传进函数之后,函数会将第二个字符串的前N个字符复制到第一个字符数组当中,再给第一个字符串最后加个结束字符。
第七个函数:
char*my_strcat(char*ch1,char*ch2)
inti,j,count=0;
ch1[i]!
count++;
for(j=0;
ch2[j]!
j++)ch1[count+j]=ch2[j];
ch1[count+j]='
}当参数传进函数之后,首先函数将会把第二个字符串中的第一个字符覆盖第一个字符数组的结束字符,然后再把第二个字符串中剩余的字符复制其后,最后加一个结束字符。
第八个函数:
char*my_strncat(char*ch1,char*ch2,intn){inti,j,count=0;
i++)count++;
j<
}当参数传进函数之后,首先函数将会把第二个字符串中的第一个字符覆盖第一个字符数组的结束字符,然后再把第二个字符串中N-1个字符复制其后,最后加一个结束字符。
第九个函数:
intmy_strlen(char*ch){inti,count=0;
ch[i]!
returncount;
}当参数传进函数函数之后,我们先判断字符串的第一个字符是不是空字符,如果不是,计数变量就加一,以后的是依次类推。
第十个函数:
voidmy_itoa(intn){charch[100];
intd=1,i=0;
if(n>
0){while(n!
=0){d=n%10;
n=n/10;
ch[i++]=d+48;
}while(i>
=0){putchar(ch[--i]);
}}elseif(n<
0){n*=-1;
while(n!
=0){d=n%10;
}ch[i++]=45;
while(i>
}}elseputchar('
printf("
}当参数传入函数之后,函数先判断传入的整数是正是负是零,如果为正,函数就对这个正数和十求余,求到的余数,函数将会把它存入函数定义的字符数组当中,直到正数为零,然后函数会逆着把字符数组存入的字符输出来;
如果为负数,先给这个数乘负一,然后就执行和正数一样的程序;
如果为零,函数将会直接输出零。
第十一个函数:
voidmy_itof(doublen){charch[50],chx[50];
doublexb,jh;
intd=1,i=0,zb,j=0;
constintws=15;
if((int)n>
0){zb=(int)n;
xb=n-zb;
jh=xb;
while(j<
ws){chx[j++]=((int)(jh*10))+48;
jh=jh*10-((int)(jh*10));
}ch[i++]=46;
while(zb!
=0){d=zb%10;
ch[i++]=d+48;
zb=zb/10;
}while(i>
=0){putchar(ch[--i]);
}for(i=0;
ws;
i++){putchar(chx[i]);
}printf("
}elseif((int)n<
zb=(int)n;
xb=n-zb;
jh=xb;
while(j<
ws){chx[j++]=((int)(jh*10))+48;
jh=jh*10-(int)(jh*10);
}ch[i++]=46;
while(zb!
=0){d=zb%10;
while(i>
}for(i=0;
i++){putchar(chx[i]);
}printf("
}else{puts("
0.00000000000000000000"
}}当参数传入函数之后,函数先判断传入的浮点数是正是负是零,如果为正,函数就对这个正浮点数取整和取小数部分,然后函数会将小数部分存入一个字符数组当中,然后将小数点和整数部分存入,然后函数会逆着把字符数组存入的字符输出来;
第十二个函数:
intsd(intn){intcf=1,i;
n;
i++)cf*=10;
returncf;
}voidmy_strtoi(char*ch){intc1,zs=0,i,k,j,bj,sl,ej;
charchb[50],chs[50],che[50];
c1=my_strlen(ch);
for(i=0,k=1;
c1;
i++,k++){zs+=(ch[i]-48)*sd(c1-k);
}printf("
%d"
zs);
bj=zs;
sl=zs;
ej=zs;
bj!
=0;
j++){chb[j]=bj%8+48;
bj=bj/8;
}while(j>
0)putchar(chb[--j]);
"
sl!
j++){if((sl%16)>
=0&
(sl%16)<
=9){chs[j]=sl%16+48;
sl=sl/16;
}else{chs[j]=sl%16+87;
}}while(j>
0)putchar(chs[--j]);
ej!
j++){che[j]=ej%2+48;
ej=ej/2;
=0)putchar(che[--j]);
}当参数传入函数之后,函数将会把字符串中的字符先转换成十进制的整数,然后把十进制的整数转换成八进制、十六进制、二进制。
第十三个函数:
char*my_strlow(char*ch){inti;
i++){if(ch[i]>
ch[i]<
){ch[i]=ch[i]+32;
}}returnch;
}当参数传入函数之后,函数将会判断字符串的每一个字符是不是大写字母,如果是就把这个字符转换成小写字母存入这个字符在字符串中的位置,直到这个字符串结尾。
第十四个函数:
char*my_strupr(char*ch){inti;
){ch[i]=ch[i]-32;
}当参数传入函数之后,函数将会判断字符串的每一个字符是不是小写字母,如果是就把这个字符转换成大写字母存入这个字符在字符串中的位置,直到这个字符串结尾。
第十五个函数:
intmy_strstrcount(char*ch1,char*ch2){inti,j,c1,c2,count1=0,count2=0;
c1=my_strlen(ch1);
c2=my_strlen(ch2);
c1&
c2<
=(c1-i);
i++){count1=0;
for(j=0;
c2;
j++){if(ch1[i+j]==ch2[j])count1++;
}if(count1==c2)count2++;
}returncount2;
}当参数传入函数之后,函数将会判断第二个字符串是否在第一个字符串当中出现,如果存在计数变量加一,如此往复,直到第一个字符串结束。
第十六个函数:
char*my_strstr(char*ch1,char*ch2){char*ch;
inti,j,c1,c2,count1=0,count2=0;
}if(count1==c2){ch=ch1+i;
break;
}}returnch;
}当参数传入函数之后,函数将会判断第二个字符串是否在第一个字符串中存在,如果存在则就返回第二个字符串在第一个字符串首次出现的位置。
第十七个函数:
char*my_strptr(char*ch1,char*ch2){char*ch=NULL;
inti,j,c1,c2;
i++){for(j=0;
j++){if(ch1[i]==ch2[j]){ch=ch1+i;
}if(ch!
=NULL)returnch;
}当参数传入函数之后,函数将判断在第一个字符串中第二字符串中的字符是否出现过,如果在,就返回这个字符在第一个字符串中所出现的首位置。
第三章函数包测试
1.判别一个字符是否是英文字母isAlpha();
例.文本内容:
aaa000
输出结果:
111000
2.判别一个字符是否是数字字符isDigit();
ABC123.
000111
3.字符串比较my_strcmp();
DoYouKnowMyTelephoneNumber188********.
初始化字符:
yesI'
mremenber.