如何解决如何在没有内置功能的情况下使用C比较具有特定格式的车辆的两个车牌
我想比较从车牌上读取的数字。我要比较的每个元素看起来都像“ CCNNNN”,其中C是A-Z中的字符,N是0到9之间的数字。例如:TS9548
它根据这些数字定义以下总顺序。考虑两个不同的数字A = A1A2M1M2M3M4和B = B1B2N1N2N3N4
我们说A
A1A2 < B1B2 in alphabetic order or,A1A2 = B1B2 and M1M2M3M4 < N1N2N3N4 as integers.
示例:
-
TS5480
-
AP9540
-
KL1452
输入格式:
输入的每一行将给出两个不同的数字,并用空格隔开。
TS45678 NM78902
HJ78654 JK78901
GH00000 DE55555
每行以'\ n'字符结尾。
输出:
对于每一行,
如果A ,则输出1
我的代码:
#include<stdio.h>
int main(){
char numberPlate[2][8];
while (scanf("%s %s",&numberPlate[0],&numberPlate[1])!=EOF){
printf(numberPlate[0]);
printf("\n");
printf(numberPlate[1]);
for (int i=0;i<=7;i++)
{
if (numberPlate[0][i]>numberPlate[1][i])
{
printf("%s is greater than %s\n",numberPlate[0],numberPlate[1]);
}
else
printf("%s is lesser than %s\n",numberPlate[1]);
break;
}
}
return(0);
}
输出:
$ cat input.txt | ./final.exe
TS45678
NM78902TS45678 is greater than NM78902
HJ78654
JK78901HJ78654 is lesser than JK78901
GH00000
DE55555GH00000 is greater than DE55555
我无法逐行读取将TS45678
数组的NM78902
存储在第1行中并将numberPlate[2][8]
存储在{{1}}数组中的输入。
其次,比较功能似乎不正确。
解决方法
最小更改使您的代码正常工作:
-
缺少
printf("\n");
printf(numberPlate[0]); printf("\n"); printf(numberPlate[1]); printf("\n"); // missing
-
当印版不相等但没有处理相等的情况时,
for
循环会中断while (/* ... */) { for (i=0;i<=7;i++) { if (numberPlate[0][i]>numberPlate[1][i]) { printf("%s is greater than %s\n",numberPlate[0],numberPlate[1]); break; } if (numberPlate[0][i]<numberPlate[1][i]) { printf("%s is lesser than %s\n",numberPlate[1]); break; } } // You should handle here the case they are equal. // [your code here] }
我让您弄清楚您可以做什么来检查它们是否相等。
这些是最小更改。如评论中所述,此代码不足以处理错误的输入。
,如果您不允许使用strcmp
,请自己写:
int strCmp(const char *a,const char *b)
{
while (*a != '\0' && *b != '\0' && *a++ == *b++)
;
return *b-*a;
}
这足以解决您的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。