实验题目字符串处理实验时间 2016-5-26实验地点DS1408实验成绩 实验性质□验证性 □设计性 √综合性教师评价:
□算法/实验过程正确; □源程序/实验内容提交 □程序结构/实验步骤合理;
□实验结果正确; □语法、语义正确; □报告规范;
其他:
评价教师签名:一、实验目的
1、掌握字符传在C语言中的表式。
2、掌握字符传和字符的基本操作。
3、掌握字符串的复制、查询、比较、连接、长度等基本C语言库函数。二、实验项目内容(实验题目)
已知一维字符数组s1,s2,s3的长度为100。其内容如下:
s1="a123b345c4m935689dsdfm93rmnwm93e4kr";
s2="m93";
要求编写实现以下功能的函数,并设计主函数进行测试。
1)求s1、s2有效字符的长度
2)统计s2在s1中出现的次数
3)将s1中出现s2的字符串删除,并将结果放入s3中。
4)将s2接在s3后。
5)对s1数组内的字符进行排序,结果还是放入s1中。
三、源程序(实验过程或算法)
1、算法如下
1)、调用length函数求s1、s2有效字符的长度:调用标准库函数strlen即可。
2)、调用times函数统计s2在s1中出现的次数:先用strlen求出s2的长度,用strchr函数在s1中寻找s2的首地址元素,再用strncmp比较字符串,最后定义一个计数器count进行循环计数即可。
3)、调用deletet函数将s1中出现s2的字符串删除,并将结果放入s3中:先用strlen求出s2的长度,再对s1进行循环判断,用strncmp比较字符串,如果相同,则调用strcpy函数来删除该字符串,最后定义一个计数器count将指针指回数组首地址,调用stccpy函数将s1复制给s3。
4)、调用link函数将s2接在s3后:调用标准库函数strcat即可。
5)、调用bubble函数对s1数组内的字符进行排序,结果还是放入s1中:利用冒泡排序,将s1数组升序排列。
冒泡排序:
1.从第一个位置开始,依次比较相邻两个位置上的数据,若是逆序则交换顺序,一趟扫描后。最大的数据排到了最后面。
2.不考虑已经排好的数据,重复1。
2、源程序如下
实验5.cpp
#include "stdafx.h"
#include
#include
void length(char s1[],char s2[]);
void times(char *s1,char *s2);
void deletet(char *s1,char *s2,char *s3);
void link(char *s2,char *s3);
void bubble(char *s1);
int main()
{
char s1[100]="a123b345c4m935689dsdfm93rmnwm93e4kr",s2[100]="m93",s3[100];
length(s1,s2);
times(s1,s2);
deletet(s1,s2,s3);
link(s2,s3);
bubble(s1);
return 0;
}
a.cpp
#include "stdafx.h"
#include
#include
void length(char s1[],char s2[])
{
int len1=strlen(s1),len2=strlen(s2);
printf("s1的有效字符个数为:%d\n",len1);
printf("s2的有效字符个数为:%d\n",len2);
}
b.cpp
#include "stdafx.h"
#include
#include
void times(char *s1,char *s2)
{
int len=strlen(s2),count=0;
while(((s1=strchr(s1,*s2))!=NULL))
{
if(strncmp(s1,s2,len)==0)
{
count++;
s1++;
continue;
}
else
s1++;
}
printf("s2在s1中出现的次数为:%d\n",count);
}
c.cpp
#include "stdafx.h"
#include
#include
voi