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