华为:尾号限行

/*
成都市从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;
 
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值