字符串1中是否包含字符串2
#include "stdio.h"
#include "string.h"
int string_search(char str1[],char str2[])
{
int i,k,l,n;
for(i=0;i<19;i++)
{if(str1[i]!='\0')
{if(str2[0]==str1[i])
{k=1;
for(k,l=i;l<19;l++,k++)
{
if(str2[k]==str1[l]);
else if(str2[k]=='\0') n=1;};
};};};
if(n==1) return 1;
}
void main()
{char str1[20],str2[20];
int m;
printf("请输入待测字符串");
gets(str1);
printf("请输入检验字符串");
gets(str2);
m=string_search(str1,str2);
if(m==1) printf("检测成功\n");
else printf("检测失败\n");
}
有些成立,有些不成立。请解。
[解决办法]
前面有部分匹配,并且后面有全匹配的时候会出错吧
子串检测有现成的算法,楼主搜索一下KMP看看吧。。。。
[解决办法]
有库函数可以使用,strstr.
[解决办法]
用哈希表………………
[解决办法]
- C/C++ code
int mystrstr(char* S, char* T, int pos){ int i=pos; //设置主串的指针位置(初始位置为给定的开始位置) int j=0; //设置子串的指针位置(初始位置为子串的首元素) while (S[i]!='/0') { if (T[j]=='/0') {return (i-j+1);} //比较到子串的’/0’,匹配成功 if (S[i]==T[j]) { i++; j++; //子串与主串在该位的匹配值相等,则继续比较下一字符 } else { //若不相同 i=i-j+1; //主串回退到本次比较开始字符的下一字符 j=0; //模式串回退到首字符 } } return 0; 比较到主串的’/0’,且此时子串的比较位不等于’/0’,匹配失败}
[解决办法]
- C/C++ code
int string_search(char str1[],char str2[]){ int i,k,l,n; for(i=0;i<19;i++) { if(str1[i]!='\0') { if(str2[0]==str1[i]) { k=1; for(k,l=i+1;l<19;l++,k++) //循环内部改动只试了几个你可以多试几遍 { if(str2[k]=='\0') n=1; else if(str2[k]!=str1[l])break; } } } } if(n==1) return 1;}
[解决办法]
1,k应该从0开始;
2,如果str2[k]!=str1[l],什么也不会发生,实际上只判断了第一个字符;
3,代码还有其他错误
[解决办法]
http://blog.csdn.net/v_JULY_v/article/details/6347454
这里有很多方法 也有详解
[解决办法]
不好意思 我想说点程序外的东西 你写的程序太乱了 让人看了闹心 是不是格式应该弄的容易看一些 因为不光要给别人看 你自己也要看的吧 做事情就仔细做吧