C 比较两个输入的数字,看它们是否相同
我目前正在尝试完成一个代码,其中一个用户输入两个5位数长的数字。然后,代码检查两个数字的同一位置是否有相同的数字,并显示两个输入的同一位置有多少相同的数字。(例如,比较56789和94712会有一个类似的数字,第三位是7。)到目前为止,我已经能够将输入分解为每个点的数字,我只需要帮助比较它们。起初我以为我可以创建一个int作为计数器,并在数字相同时使用模数或除法输出1,但我一直无法根据数字是否相同得出输出1或0的公式 假设您知道字符串的长度C 比较两个输入的数字,看它们是否相同,c,C,我目前正在尝试完成一个代码,其中一个用户输入两个5位数长的数字。然后,代码检查两个数字的同一位置是否有相同的数字,并显示两个输入的同一位置有多少相同的数字。(例如,比较56789和94712会有一个类似的数字,第三位是7。)到目前为止,我已经能够将输入分解为每个点的数字,我只需要帮助比较它们。起初我以为我可以创建一个int作为计数器,并在数字相同时使用模数或除法输出1,但我一直无法根据数字是否相同得出输出1或0的公式 假设您知道字符串的长度n(作为一个条件,您需要它们相等,如果它们的长度不同,则
n
(作为一个条件,您需要它们相等,如果它们的长度不同,则需要其他验证)
//n是字符串的长度
对于(int i=0;i我建议将这两个字符串作为字符串读取或转换为字符串(如果您有能力)。从这里开始,它是一个简单的字符串与计数器进行比较。类似如下:
#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);
}
#包括
#包括
#包括
int是数字(char*str)
{
while(*str)
如果(!isdigit(*str++)
返回(0);
申报表(1);
}
内部主(空)
{
char num1[32];
char num2[32];
整数计数=0;
printf(“数字1\n>>”;
如果(scanf(“%5s”,num1)!=1 | |!是数字(num1))
返回(0);
printf(“数字2\n>>”;
如果(scanf(“%5s”,num2)!=1 | |!是数字(num2))
返回(0);
如果(strlen(num1)!=5 | | strlen(num2)!=5)
返回(0);
对于(int i=0;i您可以很容易地使用模(%
)和除法(/
)。首先执行%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;
}
将输入值转换为无符号整数而不是直接转换为字符串的原因是,这样我就不必检查字符串是否为实际有效的数字(例如,用户类型12W34
).scanf
为我做了这件事。公式?就像a==b
?我会把输入当作字符串,逐字比较。你不认为把输入转换成int
会有什么收获吗?在过去的几天里,有几个类似的问题,这项作业吗?“我能把输入分解成每个点的数字。”-->发布该代码。最好不要将原始输入,char*
转换为数字数据类型,然后返回到char*
进行分析。调用scanf(%u)
希望转换为字符串比测试一个字符串以确保所有字符都是数字的工作要多。@0x11-更多工作?对您或处理器来说?对于从stdin获取用户输入的程序来说,性能很少是一个问题。试着用直接字符串输入编写完整的程序,并进行所有必要的检查。您得到一个简短的答案吗急诊室程序?
#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;
}
#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;
}