2023年首屆CCF軟體能力認證試題第三題

2021-07-22 06:12:40 字數 2525 閱讀 3468

題目3 命令列選項

時間限制: 1 秒

空間限制: 256 mb

問題描述

請你寫乙個命令列分析程式,用以分析給定的命令列裡包含哪些選項。

每個命令列由若干個字串組成,它們之間恰好由乙個空格分隔。這些字

符串中的第乙個為該命令列工具的名字,由小寫字母組成,你的程式不用

對它進行處理。在工具名字之後可能會包含若干選項,然後可能會包含一

些不是選項的引數。

選項有兩類:帶引數的選項和不帶引數的選項。乙個合法的無引數

選項的形式是乙個減號後面跟單個小寫字母,如」-a」 或」-b」。而帶引數

選項則由兩個由空格分隔的字串構成,前者的格式要求與無引數選項相

同,後者則是該選項的引數,是由小寫字母,數字和減號組成的非空字串。

該命令列工具的作者提供給你乙個格式字串以指定他的命令列工具需要接受哪些選項。這個字串由若干小寫字母和冒號組成,其中的每個小寫字母表示乙個該程式接受的選項。如果該小寫字母後面緊跟了乙個冒號,它就表示乙個帶引數的選項,否則則為不帶引數的選項。例如,」ab:m:」 表示該程式接受三種選項,即」-a」(不帶引數),」-b」(帶引數),

以及」-m」(帶引數)。

命令列工具的作者準備了若干條命令列用以測試你的程式。對於每個命令列,你的工具應當一直向後分析。當你的工具遇到某個字串既不是合法的選項,又不是某個合法選項的引數時,分析就停止。命令列剩餘的未分析部分不構成該命令的選項,因此你的程式應當忽略它們。

輸入格式

輸入的第一行是乙個格式字串,它至少包含乙個字元,且長度不超

過52。格式字串只包含小寫字母和冒號,保證每個小寫字母至多出現一

次,不會有兩個相鄰的冒號,也不會以冒號開頭。輸入的第二行是乙個正整數n(1 n 20),表示你需要處理的命令列的個數。

接下來有n 行,每行是乙個待處理的命令列,它包括不超過256 個字元。該命令列一定是若干個由單個空格分隔的字串構成,每個字串裡只包含小寫字母,數字和減號。

輸出格式:

輸出有n 行。其中第i 行以」case i:」 開始,然後應當有恰好乙個空格,然後應當按照字母公升序輸出該命令列中用到的所有選項的名稱,對於帶引數的選項,在輸出它的名稱之後還要輸出它的引數。如果乙個選項在命令列中出現了多次,只輸出一次。如果乙個帶引數的選項在命令列中出現了多次,只輸出最後一次出現時所帶的引數。

思路:

字串處理的題目,要很小心=.=

一開始是解析規則字串rule,因為命令只可能是小寫字母,所以用雜湊表記錄每乙個命令的使用規則(0 沒有這個碼;1 有這個碼不能接引數;2 接引數 )

接下來是處理輸入的字串,根據上面的規則來處理。相同命令只輸出一次,要檢查前面是否已經輸出該命令,輸出引數是注意修改前面命令的引數(因為只輸出最後乙個引數)。遇到不符合的情況就退出,結束解析。

#include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

int main()

}map

map;//0 沒有這個碼;1 有這個碼不能接引數;2 可以接引數

for(char ch='a';ch <= 'z';ch++)

string rule;

//處理規則

cin>>rule;

for(i=0;i1;i++)

else

}if(rule[rule.length()-2]==':') map[rule[rule.length()-1]]=1;

else

if(rule[rule.length()-1]==':') map[rule[rule.length()-2]]=2;

else

map[rule[rule.length()-1]]=1;

//讀入命令

cin>>cnt;

scanf("%c", &cc);

int cn = 0,num=0;

while(cnt)

// 處理命令

vector

ans;

num=i;

i=1;

for(i=1;clause[cn][i]!="";i++)

else

if(clause[cn][i][0]=='-'&&map[clause[cn][i][1]]==2)

else

break;

}else

break;

}res.push_back(ans);

cn++;

cnt--;

}for(i=0;icout

<<"case "

<1

<<": ";

for(j=0;jcout

<" ";

}cout

<"pause");

return

0; }

CCF軟體能力認證201604俄羅斯方塊

試題編號 201604 2 試題名稱 俄羅斯方塊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 俄羅斯方塊是俄羅斯人阿列克謝 帕基特諾夫發明的一款休閒遊戲。遊戲在乙個15行10列的方格圖上進行,方格圖上的每乙個格仔可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有乙個新的由4...

CCF計算機軟體能力認證 C 路徑解析

問題描述 在作業系統中,資料通常以檔案的形式儲存在檔案系統中。檔案系統一般採用層次化的組織形式,由目錄 或者資料夾 和檔案構成,形成一棵樹的形狀。檔案有內容,用於儲存資料。目錄是容器,可包含檔案或其他目錄。同乙個目錄下的所有檔案和目錄的名字各不相同,不同目錄下可以有名字相同的檔案或目錄。為了指定檔案...

CCF計算機軟體能力認證 C 公共鑰匙盒

問題描述 有乙個學校的老師共用n個教室,按照規定,所有的鑰匙都必須放在公共鑰匙盒裡,老師不能帶鑰匙回家。每次老師上課前,都從公共鑰匙盒裡找到自己上課的教室的鑰匙去開門,上完課後,再將鑰匙放回到鑰匙盒中。鑰匙盒一共有n個掛鉤,從左到右排成一排,用來掛n個教室的鑰匙。一串鑰匙沒有固定的懸掛位置,但鑰匙上...