注册 登录
编程论坛 C++教室

[求助]出问题了,求解

chenkuanyi 发布于 2007-04-22 09:14, 405 次点击

这是一个在源字符串中查找目标字符串的程序
但查找函数出问题了:
1 当目标字符串位于字源字符串结尾时,查找不了
2 有时也找不到目标字符串
望指教!!!

#include<iostream>
#include<string>
using namespace std;

int find(char S[],char T[]);

const int MAX=256;
int main()
{
char Source[MAX],Target[MAX];
cout<<"输入源字符串:"<<endl;
cin.getline(Source,MAX);
cout<<"输入目标字符串:"<<endl;
cin.getline(Target,MAX);

int intPos=find(Source,Target);
if(intPos>=0)
cout<<"位于源字符串:"<<intPos<<endl;
else
cout <<"没有目标字符串:"<<endl;
return 0;
}
int find(char S[],char T[])
{
int len1=strlen(S),len2=strlen(T);
int n=0;
int j=1;

for(int i=0;i<len1;i++)
{
if(S[i]==T[0])//当源字符串的有与目标字符串的首字符相同的字符时,开始比较字符串
{
n=i+1;
while((S[n]==T[j])&&(n<=len1)&&(j<=len2))
{
n++;
j++;
}
if((j==len2)&&(n<len1))//判断目标字符串是否已比较完
return i;
else
return -1;
}
j=1;
}
}

如下:
输入源字符串:
achena
输入目标字符串:
chen
位于源字符串:1


输入源字符串:
achena
输入目标字符串:
chena
没有目标字符串:

输入源字符串:
adfjaiofjaoijgaoig
输入目标字符串:
jaoijga
没有目标字符串:





[此贴子已经被作者于2007-4-22 9:15:51编辑过]

5 回复
#2
jqbbccn2007-04-22 09:24
下标从0开始,len要-1吧!
#3
wfpb2007-04-22 09:38
int find(char S[],char T[])
{
    int len1=strlen(S),len2=strlen(T);
    for(int i=0,j=0;i<len1&&j<len2;i++)
    {
        if(S[i]!=T[j])
        {
            if(j!=0)
            {
                i--;
                j=0;
            }
        }
        else j++;
        if(j==len2)
            return i+1-len2;
    }
    return -1;
}

[此贴子已经被作者于2007-4-22 9:40:36编辑过]

#4
chenkuanyi2007-04-22 10:58

版主的答复很好,但我有点小问题:
if(j!=0)
{
i--;
j=0;
}
这里觉得i应回来起始执行处,而不是简单的i--

在有些情况下会出现错误:

输入源字符串:
aaaaafsdjf
输入目标字符串:
aaaaf
没有目标字符串:

在这里要注意a 的个数.

[此贴子已经被作者于2007-4-22 11:12:07编辑过]

#5
wfpb2007-04-22 12:49
不好意思,逻辑错误了,改一下>
if(S[i]!=T[j])
{
i-=j;
j=0;
}
#6
chenkuanyi2007-04-22 13:02

在这里向版主的学识和精神致敬!!!

哈哈哈

1