/*
成都市从2012年4月5日开始对城区的主要干道实行尾号限行。
为了帮组市民快速的查询自己的车牌是在哪天限行,特别邀请你写一个程序,
输入一系列汽车的车牌号和限行的工作日,输出当天限行的车牌。当前限行规则是,
车牌号的最后一位,如果1,6,周一限行;如果是2,7,周二限行;如果是3,8,
周三限行;如果是4,9,周四限行;如果是5,0,周五限行;周六和周日对车牌不限行,
如果车牌的最后一位不是数字而是字母,那么查询倒数第二位,如果倒数第二位也是字母,
继续从右往左查看,直到查询到数字位置。当然,在中国的车牌中,是不会出现5为编号全部为字母的情况。
车牌的长度是固定的,比如“川A01010”。由于限行对全国的车辆都有效,在程序中,
用户不用输入地域编码“川A”,每个车牌号只需要输入后5位编号即可。后5位只能是数字或者字母,
而且不能全是字母。考虑到使用者对系统的不了解,可能输入错误,请大家在程序中做出容错处理,
如果发现输入牌照号不对,请返回-1。
1) 实现函数:
int CalculateLimitingCarCard(char *pCarCard,int dwDate, char *pLimitCarCard)
2) 参数说明:
输入:
pCarCard:汽车车牌号,不同车牌以“,”分隔,如:01010,0AB93,A967B
dwDate:范围(0--6)分别表示周日到周六
输出:
pLimitCarCard:当日限行的车牌, 不同车牌以“,”分隔,车牌输出顺序与输入顺序保持一致。如果当日没有车辆限行,输出空字符串
3) 返回值:
如果输入的车牌号格式或编号或日期不符合要求,请返回-1。
如果输入合法,返回0,同时输出当日限行的车牌。
例如:输入车牌:”01010,01027,01022” , 日期:2
输出车牌:”01027,01022”
/* 问题2,车牌限行 */
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cassert>
using namespace std;
int limitedCarCard(char *input,int limitdate,char *out)
{
int len=strlen(input);
char *comma=",";
int j=0;
assert(NULL!=out);
char *tokenPtr=strtok(input,",");
if(tokenPtr==NULL) //返回NULL,表示查找失败
{
cout<<"no comma in the input!"<<endl;
return -1;
}
while(tokenPtr!=NULL) //查找逗号成功
{
cout<<tokenPtr<<endl;
int n=strlen(tokenPtr);
if(n!=5)
{
cout<<"no 5 chatacter in the carCard!"<<endl;
return -1;
}
char *p=tokenPtr;
int temp=4;
while(p[temp]>'9'||p[temp]<'0')temp--; //倒着找到第一个数字
if(temp<0)
{
cout<<"no number int the carCard!"<<endl;
return -1;
}
int num=p[temp]-'0'; //倒着第一个数字
if((num%5==0&&limitdate==5)||num%5==limitdate)
{
for(int i=0;i<5;i++)
{
out[j++]=tokenPtr[i];
}
out[j++]=','; //限行的车牌号依然用逗号分隔
}
tokenPtr=strtok(NULL,","); // 循环调用字符串分隔函数,直到源字符串中没有逗号
}
out[--j]='\0';//--j delete the final comma
//out='\0';so there is the problem!
return 0;
}
int main()
{
char a[]="01010,01027,01022";
char pp[100]={0};
if(limitedCarCard(a,2,pp)==-1)
cout<<"input error!"<<endl;
cout<<"result: "<<pp<<endl;
}
华为:尾号限行
最新推荐文章于 2024-08-12 16:55:05 发布