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 和 2 上)的 ac 程序,而不是使用函数的程序,如果字符串 2 字符与字符串 1 相等,则任何字符都将逐个字符地看到,如果它们是,它将给出找到它们的第一个位置。如果什么也没找到,它会显示 -1。程序要求第一个字符相等,这就是为什么我总是打印字符串 3 中的第一个字符。程序不工作因为它总是打印-1。例如,如果我将字符串 1 dad 放在字符串 2 上,字符d 程序应显示0位置,如果我将dad放在字符串 1 上,而在字符串 2 上放置a 它应该显示1

4

1 回答 1

2

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

于 2012-11-10T17:29:16.950 回答