在线等,急急急,初等串匹配问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 09:17:51
为什么我下面的程序无论输入什么一直反回的都是-1,即没有匹配成功

#include<stdio.h>
//#include <cstring>
#include<string.h>
int Find(char s[],char t[])
{
int n,m,i=0,j=0;
n=strlen(s);
m=strlen(t);
while(i<n-1&&j<m-1)
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=m)
return (i-j+1);
else
return -1;
}

void main()
{ int mun;
char s[10],t[3];
printf("请输入S的值:\n");
for(int i=0;i<10;i++)
scanf("%c",&s[i]);
printf("请输入t的值:\n");
for(i=0;i<3;i++)
scanf("%c",&t[i]);
mun=Find(s,t);
printf("%d\n",mun);
}
那要怎么改啊,大哥,现在急急急了啊,帮忙详细些,@ 二楼的和我没改之前一样啊,无论怎么输匹配都不成功

全都运行不正确啊

因为char s[10],t[3]; 这个两个字符数组根本没有结束符'\0',下面两个计算长度的函数就不会给出正确的结果,程序也就出错了!
n=strlen(s);
m=strlen(t);

下面是修改后的程序,请看注释:
#include<stdio.h>
//#include <cstring>
#include<string.h>
int Find(char s[],char t[])
{
int n,m,i=0,j=0;
n=strlen(s);
m=strlen(t);
while(i<n && j<m) //这里不用减1
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=m)
return (i-j+1);
else
return -1;
}

void main()
{ int mun;
char s[11],t[4];
printf("请输入S的值:\n");
for(int i=0;i<10;i++)
scanf("%c",&s[i]);
s[10] = '\0';
printf("请输入t的值:\n");
for(i=0;i<3;i++)
scanf(" %c",&t[i]); //注意这里多了一个空格
t[3] = '\0';
mun=Find(s,t);
printf("%d\n",mun); <