比较两个输入的数字以查看它们是否相同

时间:2017-09-18 15:54:12

标签: c

我目前正在尝试完成一个用户输入两个5位长号码的代码。然后代码检查两个数字的相同位置是否有相同的数字,并显示两个输入的相同位置有多少相同的数字。 (例如,比较56789和94712会有一个相似的数字,第3位数的7位。)截至目前,我已经能够将输入分解为每个位数的数字,我只需要帮助比较它们。最初我以为我可以创建一个用作计数器的int,并且只要数字相同就使用模数或除法输出1,但是我无法将输出1或0的公式放在一起,具体取决于if数字是否相似。

3 个答案:

答案 0 :(得分:1)

假设您知道字符串n的长度(作为条件,您需要它们相等,如果它们的长度不同,则需要进行其他验证)

//n is the length of string
for(int i=0;i<n;i++)
{
    if(string1[i]==string2[i])
    {
      //do something, make a counter that increments here...
      //also save index i, so you can tell the position when a match occured
    }else 
    {
      //do something else if you need to do something when chars didnt match
    }
}

i=0时,您将string1[0]string2[0]进行比较,在i=1时,您将string1[1]string2[1]进行比较,依此类推.....

答案 1 :(得分:1)

如果你有能力,我建议你把两个作为字符串读取或转换成字符串。从那里它是一个简单的字符串与计数器比较。像这样:

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

int is_numeric(char *str)
{
    while (*str)
        if (!isdigit(*str++))
            return (0);
    return (1);
}

int main(void)
{
    char    num1[32];
    char    num2[32];
    int     count = 0;

    printf("Digit 1\n>> ");
    if (scanf("%5s", num1) != 1 || !is_numeric(num1))
        return (0);
    printf("Digit 2\n>> ");
    if (scanf("%5s", num2) != 1 || !is_numeric(num2))
        return (0);
    if (strlen(num1) != 5 || strlen(num2) != 5)
        return (0);
    for (int i=0; i<5; ++i)
        if (num1[i] == num2[i])
            ++count;
    printf("%d\n", count);
    return (0);
}

答案 2 :(得分:-1)

您可以使用modulo(%)和除(/)来轻松完成。首先,您执行% 10以获得最低有效数字并进行比较。然后你执行/ 10删除最低有效数字。像:

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

int main(void) {
    unsigned int i1, i2;
    int i;
    int cnt = 0;
    printf("Input first 5 digit number:\n");
    if (scanf(" %u", &i1) != 1 || i1 < 10000 || i1 > 99999) // Get integer input and check the range
    {
        printf("input error\n");
        return 0;
    }

    printf("Input second 5 digit number:\n");
    if (scanf(" %u", &i2) != 1 || i2 < 10000 || i2 > 99999) // Get integer input and check the range
    {
        printf("input error\n");
        return 0;
    }

    for (i=0; i<5; ++i)
    {
        if ((i1 % 10) == (i2 % 10)) ++cnt;      // Compare the digits
        i1 = i1 / 10;
        i2 = i2 / 10;
    }
    printf("Matching digits %d\n", cnt);    // Print the result
    return 0;
}

也可以使用字符串完成。将输入读取为unsigned int,然后使用snprintf将值转换为字符串,最后逐个字符地比较两个字符串。

类似的东西:

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

int main(void) {
    char str1[32];
    char str2[32];
    unsigned int i1, i2;
    int i;
    int cnt = 0;
    printf("Input first 5 digit number:\n");
    if (scanf(" %u", &i1) != 1)               // Get integer input
    {
        printf("input error\n");
        return 0;
    }
    snprintf(str1, 32, "%u", i1);
    if (strlen(str1) != 5)                    // Convert to string
    {
        printf("input error - not 5 digits\n");
        return 0;
    }

    printf("Input second 5 digit number:\n");
    if (scanf(" %u", &i2) != 1)               // Get integer input
    {
        printf("input error\n");
        return 0;
    }
    snprintf(str2, 32, "%u", i2);                    // Convert to string
    if (strlen(str2) != 5)
    {
        printf("input error - not 5 digits\n");
        return 0;
    }


    for (i=0; i<5; ++i)
    {
        if (str1[i] == str2[i]) ++cnt;      // Compare the characters
    }
    printf("Matching digits %d\n", cnt);    // Print the result
    return 0;
}

将输入转换为unsigned int而不是直接转换为字符串的原因是,通过这样做,我不必检查字符串是否实际上是有效数字(例如用户类型{{1} })。 12W34为我做了那件事。