0

このプログラムは、テーブル S1 のテキスト内のテーブル s2 内の文字の位置を返すように設計されています。失敗の場合は -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) 終端の ^Z 文字はs1 / s2から削除する必要があります (0x0A (改行) も削除する必要がある場合があります)。

(4) デバッグ ステートメントは文字列ではなく文字を出力しているため、printf() フォーマット文字列は「\n%s」ではなく「\n%c」である必要があります。

コードをクリーンアップすると、次の作業バージョンが得られます。

#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 に答える