3
#include <stdio.h>
#define MAX 1000
void any(char s1[], char s2[], char s3[]);
int main()
{
    char string1[MAX], string2[MAX], string3[MAX];
    printf("Jepni stringen 1\n");
    scanf("%s", &string1);  //saving string 1
    printf("Jepni stringen 2\n");
    scanf("%s", &string2);  //saving string 2
    any(string1, string2, string3); /*comparing characters from string 2 to string 1    and saving the places where they are equal on third string */
    printf("%d", string3[0]);   //printing the first character of the third string
    return 0;
}

void any(char s1[], char s2[], char s3[])
{
    int i, j, k;
    k = 0;
    for (j = 0; j != '\0'; j++) {
        for (i = 0; i != '\0'; i++) {
            if (s1[i] == s2[j]) {
            s3[k] = i;
            j++;
            k++;
            }
        }
    }
}

文字列 2 の文字が文字列 1 と等しい場合、関数 any を使用するプログラムよりも 2 つの文字列をスキャンする (文字列 1 と 2 に保存する) ac プログラムを作成しようとしています。それらが見つかった最初の位置。何も見つからない場合は-1が表示されます。プログラムは等しい最初の文字を要求します。そのため、常に文字列3の最初の文字を印刷しています。 -1. たとえば、文字列 1のお父さん と文字列 2 に文字列dを配置すると、文字列 1 と文字列 2にお父さんを配置する と、プログラムは0の位置を表示 する必要があります

4

1 に答える 1

2

まず第一に、条件は j がゼロとは異なるということであるため、for ループは開始されません。ゼロとは異なります。i についても同じです。
もう 1 つのことは、s3 は char の配列であるため、s3[k]=i を配置しても '1' または '2' にはならず、1 または 2 (ASCII 値) になるため、48 を追加する必要があります。 i ('9' まで有効、その後は 2 桁になります)、または %d 書式指定子を使用して文字列の文字を文字ごとに出力します。

void any(char s1[], char s2[], char s3[])
{
    int i, j, k;
    k = 0;
    for (j = 0; s2[j] != '\0'; j++) {
        for (i = 0; s1[i] != '\0'; i++) {
            if (s1[i] == s2[j]) {
                s3[k] = i;
                j++;
                k++;
            }
        }
    }
}

他のエラーが見つからない可能性があります。コードを試して実行し、それが正しいかどうかを確認してください (%d 指定子を使用して s3 を出力することも忘れないでください)。

于 2012-11-10T17:29:16.950 に答える