C语言实现串的求字串、比较、定位操作

0.结构体

#define MALEN 255
typedef struct{
	char ch[MAXLEN];
	int length;
}SString;//顺序存储静态分配,第一个存储位置不用

1.求子串
算法思想:
定义串Sub暂存子串,先判断所求范围是否越界。接着对应位置赋值即可。
代码如下:

bool SubString(SString &Sub, SString S, int pos, int len){
//求串S中,从位置pos起,长度为len的子串,暂存在Sub中。
//判断范围越界
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;
}

2.比较
算法思想:
串元素不同返回ASCII码差值,相同返回长度差。
代码如下:

int StrCompare(SString S, SString T){
for(int i=1; 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;
}

3.定位
算法思想:
定位操作,依次遍历,每次取定长子串比较,直至剩余元素不足以比较为止。
代码如下:

int index(SString S, SString T){
	int i=1, n=S.length, m=T.length;		
	while(i<=n-m+1){//从后往前,预留空间
		SString Sub;
		SubString(Sub, S, i, m);
		if(StrCompare(Sub, T)!=0) i++;
		else return i;
	}
return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值