微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在没有内置功能的情况下使用C比较具有特定格式的车辆的两个车牌

如何解决如何在没有内置功能的情况下使用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

如果B> A后跟一个'\ n',则输出0。

如果B = A后跟一个'\ n',则输出-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 举报,一经查实,本站将立刻删除。