判断子串位置和个数的函数

以每一个字符为起点比较是否为子串,若未达子串末尾就出现不相等的字符,则说明不是子串,结束比较,开始下一次枚举比较;若到达末尾未出现不相等的字符,则返回位置

/*果s2不是s1的子串,返回-1
如果s2是s1的子串,返回其在s1中第一次出现的位置
空串是任何串的子串,且出现位置为0 
*/ 
int strStr(char s1[],char s2[]){
	int i,j,k;
	if(s2[0]==0){//0就是'\0' 
		return 0;
	}
	for(i=0;s1[i];i++){//枚举比较起点 
		k=i;
		for(j=0;s2[j];j++,k++){
			if(s1[k]!=s2[j])//如果出现字符不等的情况就跳出内层循环 
				break;
		}
		if(s2[j]==0){//跳出内层循环,若s2已经到末尾,说明相等,返回i, 
			return i;//否则继续循环比较下一起点
		}
	}
	return -1;//双层循环过后仍没有返回,说明不是子串 
}

以每一个字符为起点比较是否为子串,若未达子串末尾就出现不相等的字符,则说明不是子串,结束比较,开始下一次枚举比较;若到达末尾未出现不相等的字符,则子串个数计数器加1

//计算字符串中子串的个数 
int subString(char str[],char substr[]){
	int i,j,k,sum=0;
	if(substr[0]==0)
		return 0;
	for(i=0;str[i];i++){
		k=i;
		for(j=0;substr[j];j++,k++){
			if(str[k]!=substr[j])
				break;
		}
		if(substr[j]=='\0'){
			sum++;
		}	
	}
	return sum;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值