1上机实训3:串的基本操作
一、实训目的
通过实训,掌握串的运算(赋值,比较,联结,插入子串,模式匹配……等)
二、实验理论知识
1)串的基本概念及其含义
串( string)是由零个或多个字符组成的有限序列,一般记作:
s='a1a2…an'(n≥0),其中s为串的名字,用单引号括起来的字符序列为串的值;ai(1≤i≤n)可以是字母、数字或其它字符(取决于程序设计语言所使用的字符集);n为串中字符的个数,称为串的长度。
2)串的存储表示及其实现
●顺序存储
可以用一组地址连续的存储单元依次存放串的各个字符,这是串的顺序
存储结构,也称为顺序串
●链式存储
和线性表的链式存储结构相类似,也可采用链表方式存储串值。串的这
种链式存储结构简称为链串。用链表存储字符串,每个结点需要有两个
域:一个数据域(data)和一个指针域(Next),其中数据域存放串中的
字符,指针域存放后继结点的地址。
3)模式匹配问题
三、实训案例与分析
【实例1】串的存储与基本运算
【实例分析】在本实例中练习计算字符串的长度、字符串的复制、字符串的比较、字符串的连接、字符串的插入等基本操作。在设计时
1)编写一个菜单函数,根据不同情况做(1-5)不同选择。
2)如果选择1,即要求计算输入字符串的长度。
3)如果选择2,完成字符串的复制。
4)如果选择3,完成字符串的比较。
5)如果选择4,完成两个字符串的连接。
6)如果选择5,字符串的插入。
【参考程序】
#include <stdio.h>
#define MAX 128
typedef enum {fail,success} status;
typedef enum {false,true} boolean;
main()
{ int strlen();
void strass();
boolean strcmp();
status strcat( );
status strins();
int t,n,i;
字符串长度17模式串长度boolean b;
status st;
char s[MAX],s1[MAX],s2[MAX];
printf("\n1. The length of string\n");
printf(" 2. The assignment of string\n");
printf(" 3. A string compare with another string:\n");
printf(" 4. A string connect with another string:\n");
printf(" 5. A string to be inserted into another string\n"); printf(" Please input a operation:");/*输入操作选项*/
scanf("%d",&t);
switch(t)
{
case 1:
printf("please input a string:\n");
getchar();
gets(s);
n=strlen(s);
printf("the length is: %d",n);
break;
case 2:
printf("please input the first string:\n");
getchar();
gets(s1);
printf("please input the second string:\n");
getchar();
gets(s2);
strass(s1,s2);
break;
case 3:
printf("please input the first string:\n"); getchar();
gets(s1);
printf("please input the second string: \n"); gets(s2);
b=strcmp(s1,s2);
if (b==true)
printf("equal\n");
else
printf("not equal\n");
break;
case 4:
printf("please input the first string:\n"); getchar();
gets(s1);
printf("please input the second string:\n"); gets(s2);
st=strcat(s1,s2);
if(st==success)
printf("answer is %s\n",s1);
else
printf("error!\n");
break;
case 5:
printf("please input the first string:\n"); getchar();
gets(s1);
printf("please input the second string:\n"); gets(s2);
printf("please input i:");
scanf("%d",&i);
st=strins(s1,i,s2);
if(st==success)
printf("answer is: %s\n",s1);
else printf("error!\n");
break;
case 0:break;
default: printf("There isn't this operation!");
}
}
int strlen(s) /*求字符串的长度子函数*/
char s[];
{ int i;
for(i=0;s[i]!='\0';i++);
return (i);
}
void strass(s1,s2)
char s1[],s2[];
{ int i=0;
while(s1[i]!='\0')
{ s2[i]=s1[i];
i++;
}
s2[i]='\0';
printf("s2 is %s",s2);
}
boolean strcmp(s1,s2) /*字符串比较子函数*/
char s1[],s2[];
{ int i=0;
while (s1[i]==s2[i] && s1[i]!='\0' && s2[i]!='\0') i++;
if (s1[i]=='\0' && s2[i]=='\0')
return (true);
else
return (false);
}
status strcat (s1,s2) /*字符串连接子函数*/
char s1[],s2[];
{ int i,j,k;
i=strlen(s1);
j=strlen(s2);
if((i+j)>=MAXN)
return(fail);
for(k=0;k<=j;k++)
s1[i+k]=s2[k];
return (success);
}
status strins (s1,i,s2)
char s1[],s2[];
int i;
{ int m,n,k;
m=strlen(s1);
n=strlen(s2);
if (i<0||i>m||(m+n)>MAXN )
return (fail) ;
for(k=m;k>=i;k--)
s1[k+n]=s1[k];
for(k=0;k<n;k++)
s1[i+k]=s2[k];
return (success);
}
【测试数据与结果:】
计算字符串的长度
1. The length of string
2. The assignment of string
3. A string compare with another string:
4. A string connect with another string:
5. A string to be inserted into another string Please input a opertation:1
please input a string:
you are a boy!
the length is: 14
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论