1.实验目的
(1)掌握串的顺序存储结构;
(2)顺序串的基本操作的实现;
(3)掌握串的操作特点。
2.实验内容
(1)定义一个包含串的求长度、拼接、比较大小等基本操作的头文件函数原型;
(2)实现串的求长度、拼接、比较大小等基本操作。
3.实验程序
1、在软件中新建一个工程,在该工程中新建一个头文件str.h,其中包含了串的基本操作对应的函数声明,代码如下:
<pre name="code" class="cpp"><span style="font-size:18px;">#ifndef Str_H //避免重复包含str.h头文件
#define Str_H
int strlen(char * s); //函数原型,求串的长度
char * strcat(char *s1,char *s2); //<span style="font-family: Arial, Helvetica, sans-serif;">函数原型,将字符串s2拼接到s1后面</span>
int strcmp(char *s1,char *s2); //<span style="font-family: Arial, Helvetica, sans-serif;">函数原型,比较字符串s1和s2的大小</span>
#endif</span>
2、在工程中新建一个源程序文件str.cpp,该文件包括与串的基本操作对应的函数定义,代码如下:
#include"str.h"
int strlen(char * s)
{
char * p=s; //指针p指向字符串s的起始地址
int len=0;
while(* p!='\0')
{
len++;
p++;
}
return len;
}
char *strcat(char * s1,char *s2)
{
char * p=s1,* q=s2;
while(* p!='\0') //将指针p移到字符串s1的尾部
p++;
while(* q!='\0')
{
* p=* q; //将q指向的字符复制到指针p指向的位置
p++;q++;
}
* p='\0';
return s1;
}
int strcmp(char *s1,char *s2)
{
char * p=s1,* q=s2;
while(* p!='\0'&& * q!='\0')
{
if(* p>* q) //p指向的字符>q指向的字符,则s1>s2
return 1;
else if(* p<* q) //<span style="font-family: Arial, Helvetica, sans-serif;">p指向的字符<q指向的字符,则s1<s2</span>
return -1;
else{p++;q++;}
}
if(* p=='\0'&& * q=='\0') //s1和s2的长度相同
return 0;
if(* p!='\0') //s1尚有未比较的字符
return 1;
if(* q!='\0') //s2尚有未比较的字符
return -1;
}
#include<iostream> //引入输入输出流
#include"str.h" //引入字符串基本操作的函数原型
using namespace std;
//以下为主函数
int main()
{
char ch[20]="Internet ",*str="of Things!";
cout<<"字符串s1的长度为:"<<strlen(ch)<<endl;
cout<<"字符串s2的长度为:"<<strlen(str)<<endl;
cout<<"字符串s1的长度减去s2的长度:"<<strcmp(ch,str)<<endl;
cout<<"字符串s2的长度减去s1的长度:"<<strcmp(str,ch)<<endl;
cout<<"字符串s1、s2拼接后为:";
strcat(ch,str);
for(int i=0;ch[i]!='\0';i++)
cout<<ch[i];
cout<<endl;
return 0;
}
4、调试运行结果如下: