- 求子串 用Sub返回串S的第pos个字符起长度为len的子串
- 比较 *** 作 若S>T,则返回值>0;若S=T,则返回值=0;若S
- 定位 *** 作 若主串S中存在与串T值相同的子串,则返回它在主串S中第一次出现的位置,否则函数值为0
- 字符串赋值 *** 作
- 打印字符串
#include
#include
#include
#define MAXLEN 255
typedef struct{
char ch[MAXLEN];
int length;
}SString;
bool SubString(SString *Sub,SString S,int pos,int len){
if(pos+len-1>S.length){
return false;
}
for(int i=pos;i<pos+len;i++){
Sub->ch[i-pos+1] = S.ch[i];
}
Sub->length = len;
return true;
}
int StrCompare(SString S,SString T){
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 = 1,n = S.length,m = T.length;
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相等的子串
}
//字符串赋值 *** 作
void assign(SString *S){
printf("请输入字符串:\n");
char x;
int i = 1;
scanf("%c",&x);
while(x!='\n'){
S->ch[i] = x;
i ++;
scanf("%c",&x);
}
S->length = i-1;
}
//打印字符串
void printString(SString S){
for(int i=1;i<=S.length;i++){
printf("%c",S.ch[i]);
}
printf("\n");
}
int main(){
SString S,T;
assign(&S);
assign(&T);
printf("求子串 *** 作:\n");
SString Sub;
SubString(&Sub,S,2,3);
printString(Sub);
printf("比较 *** 作:\n");
printf("S串和T串是否相等:%d\n",StrCompare(S,T));
printf("定位 *** 作:\n");
printf("出现位置:%d",Index(S,T));
return 0;
}
测试
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)