将2个字符串进行比较并保存结果

时间:2012-11-10 17:02:51

标签: c string compare

#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个字符串的ac程序(将它们保存在字符串1和2上)比使用函数的程序任意将逐字符看到字符串2个字符与字符串1相等,如果它们是将找到它们被找到的第一个位置。如果没有找到它会显示-1。程序要求第一个字符相等,这就是为什么我总是打印字符串3中的第一个字符。该程序不工作cuz它始终打印-1。 例如,如果我输入字符串1 爸爸 在字符串2中,字符 d 程序应显示 0 位置 如果我把爸爸放在字符串1上 在字符串2上我输入 a 它应该显示 1

1 个答案:

答案 0 :(得分:2)

首先,for循环没有开始,因为条件是j应该与零不同。在ASCII'\ 0'中为零(可能不在所有机器上),所以你宁愿检查s2 [ j]与零不同。对于i。为 另一件事是s3是一个字符数组,所以把s3 [k] = i不等于'1'或'2',而是等于1或2(ASCII值),所以你应该添加48我(直到'9',然后你将有两位数),或者使用%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)。