传递2个输入字符串进行比较

时间:2015-09-04 18:12:48

标签: c

我正在测试一个小程序,它基本上比较了2个输入字符串是否相同(就像strcmp那样)。

我想做类似的事情(用户在同一行上键入2个所需的字符串)。在这种情况下它应该返回"两个字符串是不同的"

./a.out foo bar 

我应该这样做来阅读用户的输入字符串吗?

 scanf("%s %s", str1, str2);

gets(str1); gets(str2);

这是我到目前为止(由于某些原因似乎陷入无限循环)

int mystrcmp(char str1[], char str2[]) {
    int i = 0;
    while (str1[i] == str2[i]) {
        if (str1[i] == '\0' || str2[i] == '\0') break;
        i++;
    }
    if (str1[i] == '\0' && str2[i] == '\0')
        return 0;
    else
        return -1;
}

int main(int argc, char * * argv) {
    int cmp;
    char str1[1000], str2[1000];
    scanf("%s %s", str1, str2);
    //gets(str1); gets(str2);
    cmp = mystrcmp(str1, str2);
    if (cmp == 0)
        printf("The two strings are identical.\n");
    else
        printf("The two strings are different.\n");
    return 0;
}

2 个答案:

答案 0 :(得分:5)

你不应该这样做。相反,我建议您了解命令行参数如何通过mainargc参数传递给argv函数。

我建议你尝试这个程序来帮助你理解:

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("argc = %d\n", argc);

    for (int a = 0; a < argc; ++a)
        printf("argv[%d] = \"%s\"\n", a, argv[a]);
}

对于您的示例调用

./a.out foo bar

上面的程序将打印

argc = 3
argv[0] = "./a.out"
argv[1] = "foo"
argv[2] = "bar"

答案 1 :(得分:3)

此解决方案应该有效:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    if(argc != 3) {
        puts("Wrong number of arguments");
        return 0;
    }

    if(strcmp(argv[1], argv[2]))
        puts("The two strings are different.");
    else
        puts("The two strings are identical.");
}