#include<stdio.h>
/*定义串*/
#define MAXLEN 255
typedef struct{
char ch[MAXLEN]; //每个分量存储一个字符
int length; //串的实际长度
}SString;
/*求串的长度*/
int StrLength(SString S){
return S.length;
}
/*求子串*/
bool SubString(SString &Sub, SString S, int pos, int len){
//子串范围越界
if(pos+len-1 > S.length)
return false;
for (int i=pos-1; i<pos+len-1; i++){
Sub.ch[i-pos+1] = S.ch[i];
Sub.length = len;
}
return true;
}
/*比较串的大小*/
int StrCompare(SString S, SString T){
//比较操作:若S>T,返回值>0;若S=T,则返回值=0;若S<T,则返回值<0
for(int i=0; i<S.length && i<T.length; i++){
if(S.ch[i] != T.ch[i])
return S.ch[i]-T.ch[i];
}
//扫描过的所有字符都相同,则长度长的串更大
return S.length-T.length;
}
/*定位操作:借助基本操作*/
int Index(SString S, SString T){
int i=0, n=StrLength(S), m=StrLength(T);
SString sub; //用于暂存子串
while(i < n-m+1){ //依次取出不同子串对比
SubString(sub, S, i, m);
if(StrCompare(sub, T) != 0) ++i;
else return i; //返回子串在主串中的位置
}
return 0; //S中不存在与T相等的子串
}
int main(){
int ret;
SString S = {"abcdef",6}; //注意:结构体字符数组不能直接用=赋值
SString T = {"zxcvbnm",7};
printf("/******StrCompare*******/\n");
/*比较串的大小*/
ret=StrCompare(S,T);
if(ret > 0)
printf("S>T\n");
else if(ret == 0)
printf("S=T\n");
else
printf("S<T\n");
printf("/******SubString********/\n");
/*求子串*/
SString Sub={"",0}; //初始化时清空数组,避免脏数据
if(SubString(Sub,S,1,3)){
printf("%s\n",Sub.ch);
}
printf("/******Index************/\n");
/*定位操作:借助基本操作*/
ret = Index(S,T);
if(ret != 0){
printf("When i=%d,S=T\n",ret);
}
else
printf("S!=T\n");
return 0;
}
串的基本操作(顺序存储)
最新推荐文章于 2021-12-12 14:23:40 发布