2017-09-18 54 views
0

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

+3

配方?像'a == b'? –

+2

我会将输入视为字符串并逐个比较它们。不要以为你通过将输入转换为'int's – yano

+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

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

#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); 
} 
-1

您可以使用模(%)除以(/)做到这一点很容易。首先你要做% 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,而不是直接的字符串是通过这样做,我没有检查该字符串实际上是有效的数字(如用户类型12W34)。 scanf为我做了。

+0

不要将原始输入,char *转换为数字数据类型,然后返回char *以进行分析。调用'scanf(%u)'希望转换为一个字符串比测试一个字符串以确保所有字符都是数字更有效。 – 0x11

+0

@ 0x11 - 更多工作?对于你还是处理器?对于从stdin性能中获取用户输入的程序很少会遇到问题。尝试用直接字符串输入编写完整的程序,并进行所有需要的检查。你有一个更短的程序? – 4386427

相关问题