以每一个字符为起点比较是否为子串,若未达子串末尾就出现不相等的字符,则说明不是子串,结束比较,开始下一次枚举比较;若到达末尾未出现不相等的字符,则返回位置
/*果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;
}