當前位置:首頁 » 編程語言 » c語言判斷車牌號是否合法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言判斷車牌號是否合法

發布時間: 2022-08-22 07:45:36

A. 求一個基於c語言車輛信息管理系統

------------------------------------------
// Copyright (C) 2009 沈陽工程學院信息安全工作室
// 版權所有。
//
// 文件名:模擬停車場問題.cpp
// 文件功能描述:模擬停車場問題
//
//
// 創建標識:20091214
//
// 修改標識:20091218
// 修改描述:完成編碼
//----------------------------------------------------------------*/

//頭文件
#include <iostream>
#include <malloc.h>
#include <string>
#include <windows.h>

//常量定義
#define MAX_STOP 4 //定義停車場最大停車數
#define MAX_PLATE 10 //定義車牌號最大長度
#define TIME_COUNT "秒" //定義時間單位
#define TIME_MS_TO_CONUT 1000 //定義時間進制,意為由TIME_COUNT到毫秒的進制
#define UNIT_PRICE 10 //定義單位時間收費標准

using namespace std; //使用std命名空間

//數據結構定義
//定義存儲汽車信息的結構體
typedef struct
{
char license_plate[MAX_PLATE]; //汽車牌照號碼,定義為一個字元指針類型
char state; //汽車當前狀態,字元p表示停放在停車位上,字元s表示停放在便道上,每輛車的初始狀態用字元i來進行表示
int time; //汽車停入停車場時的時間,用來計時收費
}CAR;

//定義模擬停車場的棧結構
typedef struct
{
CAR STOP[MAX_STOP]; //汽車信息的存儲空間
int top; //用來指示棧頂位置的靜態指針
}SeqStack;

//定義模擬便道的隊列結構
typedef struct node
{
CAR WAIT; //汽車信息的存儲空間
struct node *next; //用來指示隊列位置的動態指針
}QNode; //鏈隊列節點的類型
//定義鏈隊列的收尾指針
typedef struct
{
QNode *front,*rear;
}LQueue; //將頭尾指針封裝在一起的鏈隊

//函數聲明
int Empty_LQueue(LQueue *q); //判隊空
int LeaveCheck(SeqStack parking , char *license_plate); //檢查離開的車是否在停車場中
int QueueLength(LQueue *q); //判隊長度
int Out_LQueue(LQueue *&sidewalk , char *license_plate); //出隊操作
int StackEmpty(SeqStack parking); //判斷棧是否為空
int StackFull(SeqStack parking); //判斷棧是否為滿
int StackPop(SeqStack &parking); //出棧操作
int StackTop(SeqStack parking , char *license_plate , int &time);//取棧頂元素
void Car_come(SeqStack &parking , LQueue *&sidewalk); //有車到來時的操作
void Car_leave(SeqStack &parking , LQueue *&sidewalk); //有車離開的操作
void Display(SeqStack parking); //顯示停車場內的所有信息 調試時用
void InitStack(SeqStack &parking); //初始化棧
void InitList(LQueue *&sidewalk); //初始化隊列
void In_LQueue(LQueue *&sidewalk , char *license_plate); //進隊操作
void Input_Check(char *license_plate); ////檢驗輸入的車牌是否合法
void StackPush(SeqStack &parking , char *license_plate , int stop_time);//進棧操作

void main()
{
//定義變數
SeqStack parking;
LQueue *sidewalk = NULL;
char *choice = new char;
int flag = 1; //定義一個變數 判斷是否退出

//初始化一個為空的停車場
InitStack(parking);
//初始化一個為空的便道
InitList(sidewalk);

//運行界面及功能選擇
while(flag)
{
cout<<"\n\t 停車場模擬管理系統 \n\n";
cout<<"\t|--------------------------------------------------|\n\n";
cout<<"\t|本程序為停車場的模擬管理系統,有車到來時請按C鍵。|\n\n";
cout<<"\t|然後根據屏幕提示進行相關操作,有車要走時請按l鍵。|\n\n";
cout<<"\t|然後根據屏幕提示進行相關操作,查看停車場請按D鍵。|\n\n";
cout<<"\t|然後根據屏幕提示進行相關操作,要退出系統請按Q鍵。|\n\n";
cout<<"\t|--------------------------------------------------|\n\n";
cout<<"請選擇操作:";
gets(choice);
if(1 != strlen(choice))
{
cout<<"請正確輸入選項!";
continue;
}
else
{
switch(*choice)
{
case 'c':
case 'C':
{
Car_come(parking,sidewalk);break;
}
case 'l':
case 'L':
{
Car_leave(parking,sidewalk);break;
}
case 'q':
case 'Q':
{
flag=0;break;
}
case 'd':
case 'D':
{
Display(parking);break;
}
default:
cout<<"選擇不正確!請重新選擇!\n";
}
}
}
}
//有車到來時的操作
void Car_come(SeqStack &parking , LQueue *&sidewalk)
{
//定義變數
char license_plate[MAX_PLATE];

cout<<"請輸入車輛的車牌號碼:";
Input_Check(license_plate);
//判斷停車場是否已滿,滿則進入便道,不滿進入停車場
if(StackFull(parking))
{
In_LQueue(sidewalk , license_plate); //進入便道
cout<<"停車場已滿請在便道等候,您的位置為"<<QueueLength(sidewalk)
<<endl;
}
else
{
StackPush(parking , license_plate , GetTickCount()); //進入停車場
cout<<"請進入停車場中的"<<parking.top+1<<"號停車位\n";
}
// Display(parking);
}

//有車離開時的操作
void Car_leave(SeqStack &parking , LQueue *&sidewalk)
{
//定義變數
SeqStack tmpparking; //定義臨時停車場
char leave_license_plate[MAX_PLATE]; //要離開的車牌號
char license_plate[MAX_PLATE]; //存放從停車場中讀出來的車牌信息
int time;

InitStack(tmpparking); //初始化臨時停車場
//判斷停車場中是否有車
if(StackEmpty(parking))
{
cout<<"當前停車場中沒有車\n";
return; //退出子函數
}

cout<<"請輸入要離開的車牌照:";
Input_Check(leave_license_plate);
cout<<"當前停車場中有"<<parking.top+1<<"輛車\n";

if(LeaveCheck(parking , leave_license_plate)) //判斷車是否在停車場中
{
//車在停車場中
cout<<"您的車在"<<LeaveCheck(parking , leave_license_plate)<<"號車位上\n";
while(StackTop(parking , license_plate , time)
&& (strcmp(parking.STOP[parking.top].license_plate , leave_license_plate) != 0))
{
strcpy(parking.STOP[parking.top].license_plate , license_plate);
cout<<"牌照為"<<license_plate<<"的車暫時退出停車場"<<parking.top+1<<"號位\n";
StackPush(tmpparking , license_plate , time); //停車場中的車暫時退出 進入臨時停車場
StackPop(parking); //出棧
}

cout<<"牌照為"<<license_plate<<"的車離開停車場"<<parking.top+1<<"號位\n";
cout<<"您在停車場中停了"<<(GetTickCount()-time)/TIME_MS_TO_CONUT<<TIME_COUNT<<endl; //輸出所停時間信息
cout<<"應繳費用為"<<(GetTickCount()-time)/TIME_MS_TO_CONUT*UNIT_PRICE<<"元\n";; //輸出費用信息
StackPop(parking); //出棧
//將臨時停車場中的車停回停車場
while(StackEmpty(tmpparking) != 1)
{
StackTop(tmpparking , license_plate , time);
StackPush(parking , license_plate , time);
cout<<"牌照為"<<license_plate<<"的車進入停車場"<<parking.top+1<<"號位\n";
license_plate[0] = '\0';
StackPop(tmpparking);
}

if(parking.top+1 == MAX_STOP-1) //判斷車離開前停車場是否停滿
if(QueueLength(sidewalk)) //如果停滿則判斷便道上是否有車
{
//便道中有車 則從便道中停入停車場
Out_LQueue(sidewalk , license_plate); //出隊
StackPush(parking , license_plate , GetTickCount()); //入棧
cout<<"在便道中牌照為"<<license_plate<<"的車進入停車場"<<parking.top+1<<"號位\n";
}
}
else
//車不在停車場中
cout<<"您的車不在停車場中!\n";
}

//初始化順序棧
void InitStack(SeqStack &parking)
{
parking.top = -1;
}

//判棧空
int StackEmpty(SeqStack parking)
{
if(parking.top == -1)
return 1;
else
return 0;
}

//判棧滿
int StackFull(SeqStack parking)
{
if(parking.top == MAX_STOP-1)
return 1;
else
return 0;
}

//入棧
void StackPush(SeqStack &parking , char *license_plate , int stop_time)
{
parking.top++;
strcpy(parking.STOP[parking.top].license_plate , license_plate);
parking.STOP[parking.top].state = 'p';
parking.STOP[parking.top].time = stop_time;
}

//出棧 返回棧頂指針
int StackPop(SeqStack &parking)
{
if(StackEmpty(parking))
return 0;
else
return parking.top--;
}

//取棧頂元素
int StackTop(SeqStack parking , char *license_plate , int &time)
{
if(StackEmpty(parking))
return 0;
else
{
strcpy(license_plate , parking.STOP[parking.top].license_plate);
time = parking.STOP[parking.top].time;
return 1;
}
}

//顯示所有
void Display(SeqStack parking)
{
if(parking.top == -1)
printf("停車場為空\n");
else
{
while(parking.top != -1)
{
cout<<"車牌號為:"<<parking.STOP[parking.top].license_plate;
cout<<",停在"<<parking.top + 1 <<"號車位上";
cout<<",已停"<<(GetTickCount()-parking.STOP[parking.top].time)/TIME_MS_TO_CONUT<<TIME_COUNT<<endl;
parking.top--;
}
}
}

//初始化隊列
void InitList(LQueue *&sidewalk)
{
sidewalk = (LQueue *)malloc(sizeof(LQueue));
sidewalk->front=sidewalk->rear = NULL;
}

//入隊
void In_LQueue(LQueue *&sidewalk,char *license_plate)
{
QNode *car_on_sidewalk;
car_on_sidewalk = (QNode *)malloc(sizeof(QNode)); //為新節點開辟新空間
strcpy(car_on_sidewalk->WAIT.license_plate , license_plate); //將數據寫入節點
car_on_sidewalk->WAIT.state = 's'; //寫入停車信息
car_on_sidewalk->WAIT.time = GetTickCount(); //寫入停車時間
car_on_sidewalk->next = NULL;
if(Empty_LQueue(sidewalk)) //隊空則創建第一個節點
sidewalk->front = sidewalk->rear = car_on_sidewalk;
else
{
//隊非空插入隊尾
sidewalk->rear->next = car_on_sidewalk;
sidewalk->rear = car_on_sidewalk;
}
}

//判隊空
int Empty_LQueue(LQueue *q)
{
if(q->front == NULL)
return 1;
else
return 0;
}

//判隊長度 返回隊長
int QueueLength(LQueue *q)
{
QNode *p=q->front;
int i=0;
while(p != NULL)
{
i++;
p=p->next;
}
return i;
}

//出隊 成功返回1 隊空返回0
int Out_LQueue(LQueue *&sidewalk,char *license_plate)
{
QNode *car_on_sidewalk;

if(Empty_LQueue(sidewalk)) //如果隊空返回0
return 0;

car_on_sidewalk = sidewalk->front;
strcpy(license_plate , car_on_sidewalk->WAIT.license_plate);//取出隊頭元素
if(sidewalk->front == sidewalk->rear) //隊中只有一個元素
sidewalk->front = sidewalk->rear=NULL; //刪除元素
else
sidewalk->front = sidewalk->front->next; //隊頭指針後移
free(car_on_sidewalk); //釋放指針
return 1;
}

//檢查離開的車是否在停車場中 返回車在停車場中位置 不在則返回0
int LeaveCheck(SeqStack parking,char *license_plate)
{
int flag = parking.top+1; //定義變數記錄當前車在停車場中位置

if(StackEmpty(parking))
return 0;
else
{
//查找離開車所在位置
while(parking.top != -1 && strcmp(parking.STOP[parking.top].license_plate , license_plate) != 0)
{
flag--;
parking.top--;
}
return flag;
}
}

//檢驗輸入的車牌是否合法
void Input_Check(char *license_plate)
{
int flag = 1;
int i;
string tmpstr;
while(flag)
{
cin>>tmpstr;
getchar();
if(tmpstr.length()<MAX_PLATE)
{
for(i=0;i<10;i++)
license_plate[i] = tmpstr.c_str()[i];
flag = 0;
}
else
cout<<"輸入有誤,請重新輸入:";
}
}

以前的課設 你看看吧 純手工的~~

B. 如何在下列c語言停車場管理程序車輛登記環節中判斷車牌號是否重復

我說一下思路,代碼就不寫了,你添一下很快的。
if(Enter->top<MAX)
{
//遍歷比較是否有重復,如果有就break

}
else
{

}
//保存入已場的車輛

這樣子就行了。

C. 用C語言確定車牌范圍,也就是如何把他們一一列出來

車牌號碼末尾是字母確定單雙號各個地方的規定稍有不同。 北京:尾號為英文字母的機動車按雙號管理。 浙江:前13個字母從A到M算單號,後13個從N到Z算雙號。 濟南:全運會期間按單雙號限行,尾號為字母的,以最後一位阿拉伯數字為准。 詳情需要以當地車管所公布的單雙號執行規定執行。

D. JAVA中的判斷車牌號的正則表達式是什麼啊

String cph="WJ12345";
Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5|WJ]{1}[A-Z0-9]{6}$");
Matcher matcher = pattern.matcher(cph);
if (!matcher.matches()) {
System.out.println("車牌號格式不對!");
}else{
System.out.println("車牌號格式正確!");
}

E. VC課設選車牌號問題,本人研究了很長時間還是不懂rand函數的用法,求幫助,本人剛入門,只能用iostream

給你個程序可以產生隨機的10個大寫字母和10個數字,你研究一下吧。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned int) time(NULL));
for(int i=0;i<10;i++)
{
int a=rand()%26;
char x=a+'A';
printf("%c ",x);
}
printf("\n");
for(int i=0;i<10;i++)
{
int b=rand()%10;
printf("%d ",b);
}
return 0;
}
至於怎麼拼成字元串我先不教你,你自己學習下,研究試試,不難的。

F. C++車牌號市區代號判斷,出問題,蘇B是對的 可是速B應該不對 可它認對了,有什麼辦法解決,急

stringstr("人類");if((int)str.find("死")>0)
printf("okay ");//匹配成功else
printf("none ");//匹配失敗//輸出okay

竟然匹配了!?

*探求原因*

為什麼會產生這種輸出呢?
我們來想一下string.find是怎樣查找的。
按字元查找!
那麼,「人類」有幾個字元(』』排外)呢?

printf("%d ",string("人類").length()); // 411

咦?奇怪,分明是2個,怎麼有4個呢?

原來,Windows中1,中文(簡體)通常使用GBK來編碼的。

我們來看看「人類」是怎麼編碼的:

printf("%X ", "人類"[0]);
printf("%X ", "人類"[1]);
printf("%X ", "人類"[2]);
printf("%X ", "人類"[3]);
// FFFFFFC8 FFFFFFCB FFFFFFC0 FFFFFFE01234512345

請看!
「人類」的GBK編碼是C8CB C0E0。

printf("%X ", "死"[0]);
printf("%X ", "死"[1]);
// FFFFFFCB FFFFFFC0123123

而「死」的編碼是CBC0!
這樣一來,使用string的find函數進行搜索時,」人類」能夠匹配」死」的問題就瞬間搞懂了。

*問題求解*

那麼,怎麼解決呢?

經查詢資料:
GBK分兩段:ASCII段和中文段。ASCII段使用單位元組,和ASCII編碼保持一致;中文(及特殊符號)段使用雙位元組編碼。在雙位元組段中,第一位元組的范圍是81–FE(也就是不含80和FF),第二位元組的一部分領域在40–7E,其他領域在80–FE2。
也就是說,在GBK編碼中,中文有兩個位元組,首位元組范圍81~FE,尾位元組范圍40~7E。
這么說來,判斷一個字元(或者中文的一個字)是否為中文,只要判斷其是否大於0x80即可。在判斷其大於時,獲取兩個位元組,同時向下跳一位元組,進行後續判斷;如果不大於,則為ASCII字元,獲取一個位元組。

根據以上所述,我們利用union將字元化為int型。

代碼如下:

std::vector<int> stringToVecInt(const std::string &str)
{
union {
char c[2];
int i;
} convert;

// 段位清零
convert.i = 0;

std::vector<int> vec;

for (unsigned i = 0; i < str.length(); i++) {
// GBK編碼首字元大於0x80
if ((unsigned)str[i] > 0x80) {
// 利用union進行轉化,注意是大端序
convert.c[1] = str[i];
convert.c[0] = str[i + 1];
vec.push_back(convert.i);
i++;
} else
// 小於0x80,為ASCII編碼,一個位元組
vec.push_back(str[i]);
}
return vec;
}212223242526

我們使用<algorithm>里的search函數,進行子串的搜索。

bool include(const std::string &str, const std::string &msg)
{
auto sour = stringToVecInt(str);
auto find = stringToVecInt(msg);
return std::search(sour.begin(), sour.end(), find.begin(), find.end()) != sour.end();
}123456123456

測試下效果:

if (include("人類","死"))

printf("okay "); // 匹配成功
else
printf("none "); // 匹配失敗
// none

G. c# textbox中要進行車牌號驗證輸入

1:先定義一個數組來保存車牌號的第一位:private List<string> str1 = new List<string>() { "京", "津", "冀", "晉", "蒙", "遼", "吉",
"黑", "滬", "蘇", "浙", "皖", "閩", "贛", "魯", "豫", "鄂", "湘", "粵", "桂", "瓊", "渝", "川", "貴", "雲", "藏", "陝", "甘", "青", "寧", "新", "學" };車牌號的第一位只能從中選擇一個。
2:車牌號的第二位判斷必須是大寫字母: 其中strNow是textbox中的值, if (strNow.Length == 2 && !(Convert.ToInt32(strNow[1]) > Convert.ToInt32('A') - 1 && Convert.ToInt32(strNow[1]) < Convert.ToInt32('Z') + 1))
3:車牌號中剩下的後五位只能是大寫字母或數字: if (strNow.Length > 2 && !(
(Convert.ToInt32(strNow[strNow.Length - 1]) > Convert.ToInt32('A') - 1 && Convert.ToInt32(strNow[strNow.Length - 1]) < Convert.ToInt32('Z') + 1) ||
(Convert.ToInt32(strNow[strNow.Length - 1]) > Convert.ToInt32('0') - 1 && Convert.ToInt32(strNow[strNow.Length - 1]) < Convert.ToInt32('9') + 1)) )
4:判斷textbox中的值長度不能超過8位: if (strNow.Length > 8)

H. 編寫C語言程序汽車的車牌號有7個字元為首的字元限定為";京:

/*

京A123C5 : 後五位有非規定字元!

津H88659 : 非歸屬地車牌!

京B1234 : 車牌號碼長度錯誤!

京AA12343 : 車牌號碼長度錯誤!

京A88880 : OK!

京C8865C : 後五位有非規定字元!

Press any key to continue

*/

#include<iostream>
#include<cstring>

usingnamespacestd;

#defineMAXLEN8

intCheckPlateNumber(charplatenumber[]){
inti;
charbelonging[5];
if(strlen(platenumber)!=8)return1;//編碼長度錯誤
belonging[0]=platenumber[0];
belonging[1]=platenumber[1];
belonging[2]='';
if(strcmp(belonging,"京"))return2;//車牌所屬地錯誤
if(platenumber[2]<'A'||platenumber[2]>'Z')return3;//首號錯誤
for(i=3;i<MAXLEN;++i)
if(platenumber[i]<'0'||platenumber[i]>'9')return4;//其他錯誤
return0;
}

intmain(){
chars[][MAXLEN+2]={"京A123C5","津H88659","京B1234","京AA12343","京A88880","京C8865C"};
for(inti=0;i<6;++i){
cout<<s[i]<<":";
switch(CheckPlateNumber(s[i])){
case0:cout<<"OK! ";break;
case1:cout<<"車牌號碼長度錯誤! ";break;
case2:cout<<"非歸屬地車牌! ";break;
case3:cout<<"首號錯誤! ";break;
case4:cout<<"後五位有非規定字元! ";break;
default:cout<<"其他錯誤! ";break;
}
}
return0;
}

I. c語言判斷車牌號是否合法

合法,選取數字用隨機數做,字母的隨機可以用ASSIC隨機,然後在轉化回去。

J. c語言 車牌號問題

你想到44 了嗎 ?44 的時候你sum 加了2次,,
還有不懂你的int(void)是什麼意思 我們都是 int main()
當你的數字打起來後比如1 1000,你咩有考慮384 438的情況了
所以 要考慮有38 沒4的情況和 有4 的情況這樣2個,在考慮4 的時候,還要注意有44 444 4444之類 的出現很多次4的,就要在c[j]==4的背後跟上 break 表示跳出,不再增加。這樣考慮之後你的代碼應該就是正確的了 我現在 也在做這個,,具體的我覺得自己做才有感覺