#include<stdio.h> int find_char(const char*str1,const char*str2) { const char*p1=str1; const char*p2=str2; int pos=-1; for(p1=str1;*p1!='\0';p1++) { if(*p1==*p2) { if(pos==-1) { pos=p1-str1; } p2++; if(*p2=='\0') { return pos; } else { p2=str2; if(pos!=-1) { p1=str1+pos; } pos=-1; } p1++; } return -1; } } int main() { char str1[100],str2[100]; printf("Input str1:\n"); gets(str1); printf("Input str2:\n"); gets(str2); printf("position=%d\n",find_char(str1,str2)); return 0; }错误在哪
时间: 2024-01-27 10:06:21 浏览: 67
这个程序的错误在于,函数 find_char 的 return -1; 语句放错了位置,应该放在 for 循环结束后。原因是,如果在循环中找到了 str2 在 str1 中的位置,应该直接返回该位置的下标值,而不是在每次循环中都返回 -1。如果放在循环中,就会在第一次循环时就返回 -1,导致函数无法正常工作。正确的代码如下:
```
#include<stdio.h>
int find_char(const char*str1,const char*str2)
{
const char*p1=str1;
const char*p2=str2;
int pos=-1;
for(p1=str1;*p1!='\0';p1++)
{
if(*p1==*p2)
{
if(pos==-1)
{
pos=p1-str1;
}
p2++;
if(*p2=='\0')
{
return pos;
}
else
{
p2=str2;
if(pos!=-1)
{
p1=str1+pos;
}
pos=-1;
}
}
}
return -1; // 在循环结束后返回 -1
}
int main()
{
char str1[100],str2[100];
printf("Input str1:\n");
gets(str1);
printf("Input str2:\n");
gets(str2);
printf("position=%d\n",find_char(str1,str2));
return 0;
}
```
阅读全文