0

该程序旨在返回字符在表 s2 中的位置,在表 S1 的文本中。如果失败,它将返回 -1。

#include <stdio.h>
#include <stdlib.h>
#define RANGE 10

int any(char [], char []);

int main()
{
    char s1[RANGE];
    char s2[RANGE];
    int i,j;
    while( (s1[i]=getchar()) != EOF);
    while( (s2[j]=getchar()) != EOF);
    printf("%d", any(s1, s2));
 }

 int any(char s1[], char s2[])
 {
 int i,j;

 for(i=0;s1[i]!='\0';i++)
    for(j=0;s2[j]!='\0';j++)
    {
        // for debug
        printf("\n%s", s1[i]);
        printf("\n%s", s2[j]);
        //
        if(s1[i]==s2[j])
            return i;
    }
 return -1;
 }

在我看来,比较表格中的字符时会出现问题。

在这种情况下,程序应该返回 -1: 在此处输入图像描述

4

2 回答 2

1

代码存在以下问题:

(1) 变量ij在代码中未初始化,可能导致崩溃:

int i,j;
while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);

(2) 代码还需要在读取输入时递增ij的值。否则将导致所有输入写入 s1[0] / s2[0]:

while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);

(3) 应该从s1 / s2中删除终止的 ^Z 字符(您可能还想删除 0x0A(换行符))。

(4) 调试语句输出的是字符,而不是字符串,所以 printf() 格式的字符串应该是“\n%c”,而不是“\n%s”。

清理您的代码会提供以下工作版本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RANGE 10

int any(char [], char []);

int main()
{
char s1[RANGE];
char s2[RANGE];
int i,j;

i = j = 0;

while( (s1[i++]=getchar()) != EOF);
s1[i-2] = 0;
while( (s2[j++]=getchar()) != EOF);
s2[j-2] = 0;

printf("%d", any(s1, s2));
}

int any(char s1[], char s2[])
{
int i,j;

for(i=0;s1[i]!='\0';i++)
for(j=0;s2[j]!='\0';j++)
{
    // for debug
    printf("\n%c", s1[i]);
    printf("\n%c", s2[j]);
    //
    if(s1[i]==s2[j])
        return i;
}
return -1;
}

'aaaa^Z' / 'bbbb^Z' 的输出是:

在此处输入图像描述

于 2013-11-10T15:03:38.703 回答
0
// for debug
printf("\n%s", s1[i]);
printf("\n%s", s2[j]);

%s 表示参数是一个字符串(又名 char*),但实际上您传递的只是一个 char。尝试这个:

// for debug
printf("\n%c", s1[i]);
printf("\n%c", s2[j]);
于 2013-11-10T15:07:12.993 回答