首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串1中是否包含字符串2解决办法

2012-05-23 
字符串1中是否包含字符串2#include stdio.h#include string.hint string_search(char str1[],char str

字符串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
这里有很多方法 也有详解
[解决办法]
不好意思 我想说点程序外的东西 你写的程序太乱了 让人看了闹心 是不是格式应该弄的容易看一些 因为不光要给别人看 你自己也要看的吧 做事情就仔细做吧

热点排行