定义顺序串存储结构:
typedef struct{
char s[MAXSIZE];
int len;
}str;
上面的数组便是用来存储串的数据,且定义字符总长不能超过MAXSIZE,可以根据实际情况调整。下面的len显然易见就是串的长度了,
求串长
int Strlen(str S){
return S.len;
}
判空串
int StrEmpty(str S){
if(S.len==0)
return 1;
else
return 0;
}
串赋值
void strAssign(str S,char t[]){
int i=0;
while(S.s[i]){
t[i]=S.s[i];
i++;
}
}
串的比较函数
int StrCompare(str s,str t){
int i;
for(int i=0;i<s.len && i<t.len;i++){
if(s.s[i]!=t.s[i]){
return s.s[i]-t.s[i];
}
}
return (s.len-t.len);
}
首先就是通过函数传入两个字符串,然后开始判断。字符串的判断是从第一个字符开始判断,而不是先看长度的。
举例:
①假设以字符串s为abcd,字符串t为abdf为例传入,那么进入程序以后,前两个字符相同(也就是i从0到1的时候),到i=2的时候,便是判断c和d,c小于d,那么此刻满足if条件,所以返回的是可能是正数也可能是负数(此题返回的应该是负数,则表明的是字符串s<t);
②假设以字符串s和t都为abcd,那么在for循环语句里就没有满足if语句的时候,最后退出循环的时候,即返回两个字符串长度的值(此处为0);
③假设字符串s为abc,字符串t为abcd,那么在for语句里也不会满足if语句的时候,最后退出循环(当i的长度小于其中一个结构体的长度时便不满足for里面的循环条件就退出循环了),所以此处可能返回正数也可能返回负数(此题此处返回负数,表明的是字符串s<t)。
点(.)是用于结构体变量访问成员,箭头(->)是用于结构体指针访问成员。
文章参考:
C语言中访问结构体成员时 点 . 和 箭头 -> 的区别:http://t.csdnimg.cn/OPWjC
《数据结构——用C语言描述(第三版)》--耿国华;