ccf命令行选项只能用c实现_CCF-201403-3-命令行选项
問題描述
試題編號:
201403-3
試題名稱:
命令行選項
時間限制:
1.0s
內存限制:
256.0MB
問題描述:
問題描述
請你寫一個命令行分析程序,用以分析給定的命令行里包含哪些選項。每個命令行由若干個字符串組成,它們之間恰好由一個空格分隔。這些字符串中的第一個為該命令行工具的名字,由小寫字母組成,你的程序不用對它進行處理。在工具名字之后可能會包含若干選項,然后可能會包含一
些不是選項的參數(shù)。
選項有兩類:帶參數(shù)的選項和不帶參數(shù)的選項。一個合法的無參數(shù)選項的形式是一個減號后面跟單個小寫字母,如"-a" 或"-b"。而帶參數(shù)選項則由兩個由空格分隔的字符串構成,前者的格式要求與無參數(shù)選項相同,后者則是該選項的參數(shù),是由小寫字母,數(shù)字和減號組成的非空字符串。
該命令行工具的作者提供給你一個格式字符串以指定他的命令行工具需要接受哪些選項。這個字符串由若干小寫字母和冒號組成,其中的每個小寫字母表示一個該程序接受的選項。如果該小寫字母后面緊跟了一個冒號,它就表示一個帶參數(shù)的選項,否則則為不帶參數(shù)的選項。例如, "ab:m:" 表示該程序接受三種選項,即"-a"(不帶參數(shù)),"-b"(帶參數(shù)), 以及"-m"(帶參數(shù))。
命令行工具的作者準備了若干條命令行用以測試你的程序。對于每個命令行,你的工具應當一直向后分析。當你的工具遇到某個字符串既不是合法的選項,又不是某個合法選項的參數(shù)時,分析就停止。命令行剩余的未分析部分不構成該命令的選項,因此你的程序應當忽略它們。
輸入格式
輸入的第一行是一個格式字符串,它至少包含一個字符,且長度不超過 52。格式字符串只包含小寫字母和冒號,保證每個小寫字母至多出現(xiàn)一次,不會有兩個相鄰的冒號,也不會以冒號開頭。
輸入的第二行是一個正整數(shù) N(1 ≤ N ≤ 20),表示你需要處理的命令行的個數(shù)。
接下來有 N 行,每行是一個待處理的命令行,它包括不超過 256 個字符。該命令行一定是若干個由單個空格分隔的字符串構成,每個字符串里只包含小寫字母,數(shù)字和減號。
輸出格式
輸出有 N 行。其中第 i 行以"Case i:" 開始,然后應當有恰好一個空格,然后應當按照字母升序輸出該命令行中用到的所有選項的名稱,對于帶參數(shù)的選項,在輸出它的名稱之后還要輸出它的參數(shù)。如果一個選項在命令行中出現(xiàn)了多次,只輸出一次。如果一個帶參數(shù)的選項在命令行中出
現(xiàn)了多次,只輸出最后一次出現(xiàn)時所帶的參數(shù)。
樣例輸入
albw:x
4
ls -a -l -a documents -b
ls
ls -w 10 -x -w 15
ls -a -b -c -d -e -l
樣例輸出
Case 1: -a -l
Case 2:
Case 3: -w 15 -x
Case 4: -a -b
解題思路:
一直模擬,按照它的規(guī)則來寫。這里就不贅述了,因為我感覺代碼里面的注釋已經很詳細了。
我沒用map,也沒有想到用map。直接模擬的,只得到了90分。有大神路過看到博客的話請指點一二,因為我也想拿滿分吶。
源代碼:
#include
#include
#include
#include
#include
using namespace std;
struct node
{
int appear;//該命令是否在格式字符串中出現(xiàn)
int flag;//命令是否在命令行中出現(xiàn)
int appear_parameter;//命令后面是否有參數(shù)
string parameter;//最終的命令是什么樣子的
};
node ans[26];
void init_ans()
{
for(int i=0;i<26;i++)
{
ans[i].appear=0;//初始化沒有在格式字符串中出現(xiàn)
ans[i].flag=0;//默認沒有在命令行中出現(xiàn)
ans[i].appear_parameter=0;//初始化都沒有命令參數(shù)
ans[i].parameter="";//初始化為一個空串
}
}
void init_pos()
{
for(int i=0;i<26;i++)
{
ans[i].flag=0;//如果在命令行中出現(xiàn)的話標記為1
ans[i].parameter="";//初始化為一個空串
}
}
int main()
{
int num;//判斷條數(shù)
int k=1;
string s;//格式化字符串
string ss;//需要判斷的命令行
cin>>s;
init_ans();
int len_s=s.length();
for(int i=0;i
{
if(s[i]>='a'&&s[i]<='z')
{
ans[s[i]-'a'].appear=1;//該命令出現(xiàn)
}
else if(s[i]==':')
{
ans[s[i-1]-'a'].appear_parameter=1;//帶有參數(shù)
}
}
scanf("%d",&num);
cin.ignore();//讀入一個換行符,不然也會算作一個命令的
while(k<=num)
{
getline(cin,ss);
init_pos();
int len_ss=ss.length();
int ss_index=len_ss-1;
while(ss[ss_index]==' ')//考慮一下后面存在多個空格的情況,雖然沒有什么用
{
ss_index--;
}
string p=ss.substr(0,ss_index+1);
ss=p;
len_ss=ss.length();
if(len_ss<=2)
{
cout<
k++;
continue;
}
ss+=" ";//在最后面加一個空格,方便處理
int l=0;//分割字符串的左邊界
int r=0;//分割字符串的右邊界
for(int i=0;i
{
if(ss[i]==' ')
{
l=i;
r=i;
r++;
while(ss[r]!=' ')
{
r++;
}
string temp_s=ss.substr(l+1,r-l-1);
//如果截取出來的字符串是一個命令(要絕對保證),不用擔心是不是參數(shù),下面判斷到了
if(temp_s.length()==2&&temp_s[0]=='-'&&temp_s[1]>='a'&&temp_s[1]<='z')
{
if(ans[temp_s[1]-'a'].appear==0)//該命令沒有出現(xiàn)
{
break;
}
else//該命令在格式字符串中出現(xiàn)過
{
if(ans[temp_s[1]-'a'].appear_parameter==0)//正常的命令,并且沒有參數(shù)
{
ans[temp_s[1]-'a'].flag=1;
i=r-1;
}
else//正常的命令,并且有參數(shù),那就讀取下一個是不是參數(shù)
{
int ll=r;
int rr=r;
rr++;
while(ss[rr]!=' ')
{
rr++;
}
string temp_ss=ss.substr(ll+1,rr-ll-1);//截取出來一個參數(shù)字符串
//判斷參數(shù)字符串是否符合標準
int flag_parameter=1;//默認符合標準
for(int j=0;j
{
//如果當前字符不是減號,不是小寫字母,也不是數(shù)字說明不是標準參數(shù)
if((temp_ss[j]!='-')&&(temp_ss[j]'9')&&(temp_ss[j]'z'))
{
flag_parameter=0;
}
}
if(flag_parameter==0)//不符合參數(shù)標準
{
break;
}
else//符合參數(shù)標準
{
ans[temp_s[1]-'a'].flag=1;//該命令出現(xiàn)
ans[temp_s[1]-'a'].parameter=temp_ss;//該命令的參數(shù)
i=rr-1;
}
}
}
}
else
{
break;//不是正常的命令
}
}
}
string res="";
for(int i=0;i<26;i++)
{
if(ans[i].flag==1)//出現(xiàn)該命令
{
if(ans[i].appear_parameter==0)//無參數(shù)類型
{
res+=" ";
res+="-";
res+=i+'a';
}
else//有參數(shù)類型
{
res+=" ";
res+="-";
res+=i+'a';
res+=" ";
res+=ans[i].parameter;
}
}
}
cout<
cout<
k++;
}
return 0;
}
CCF CSP 201403-3 命令行選項
CCF計算機職業(yè)資格認證考試題解系列文章為meelo原創(chuàng),請務必以鏈接形式注明本文地址 CCF CSP 201403-3 命令行選項 問題描述 請你寫一個命令行分析程序,用以分析給定的命令行里包含哪些 ...
Maven學習(四)Maven 命令行選項
說明: 1.使用-選項時,和后面的參數(shù)之間可以不要空格.而使用--選項時,和后面的參數(shù)之??? 間必須有空格.如下面的例子: $ mvn help:describe -Dcmd=compiler:co ...
學習筆記——Maven 命令行選項
2014-10-09:更新裁剪反應堆具體用法 說明: 1.使用-選項時,和后面的參數(shù)之間可以不要空格.而使用--選項時,和后面的參數(shù)之??? 間必須有空格.如下面的例子: $ mvn help:des ...
Microsoft Windows Installer 工具 Msiexec.exe 的命令行選項
摘自:http://support.microsoft.com/kb/314881/zh-cn 概要 本文列出了 Windows Installer 工具 Msiexec.exe 的命令行選項.Msi ...
make的命令行選項
make的命令行選項 -b -m 忽略,提供其它版本make兼容性. -B --always-make 強制重建所有規(guī)則的目標,不根據(jù)規(guī)則的依賴描述決定是否重建目標文件. -C DIR --direc ...
PhantomJS命令行選項
支持命令行選項有: --help或-h列出所有可能的命令行選項.立即停止,不會運行一個腳本作為參數(shù)傳遞. --version或-v打印的版本PhantomJS.立即停止,不會運行一個腳本作為參數(shù)傳遞. ...
【Python】【自動化測試】【pytest】【常用命令行選項】
https://www.cnblogs.com/cnkemi/p/9989019.html http://www.cnblogs.com/cnkemi/p/10002788.html pytest 常 ...
python 解析命令行選項
問題: 程序如何能夠解析命令行選項 解決方案 argparse?模塊可被用來解析命令行選項 argparse?模塊 argparse?模塊是標準庫中最大的模塊之一,擁有大量的配置選項 dest?參數(shù)指 ...
Ruby 命令行選項
Ruby 命令行選項 Ruby 一般是從命令行運行,方式如下: $ ruby [ options ] [.] [ programfile ] [ arguments ... ] 解釋器可以通過下列選項 ...
CCF真題之命令行選項
201403-3 問題描述 請你寫一個命令行分析程序,用以分析給定的命令行里包含哪些選項.每個命令行由若干個字符串組成,它們之間恰好由一個空格分隔.這些字符串中的第一個為該命令行工具的名字,由小寫字母 ...
隨機推薦
C#.NET里面抽象類和接口有什么區(qū)別?
聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況.不能創(chuàng)建abstract 類的實例.然 ...
python簡單實現(xiàn)用戶表單登錄
實現(xiàn)簡單的用戶表單驗證登錄 user="desperado" pwd=" s=0 for i in range(10): if s < 3: username = ...
java時間庫Joda-Time
雖然在java8里面有內置的最新的時間庫,但是在java8之前的版本所有的時間操作都得自己寫,未免有些繁瑣,如果我們不自己封裝的話可以用Joda-Time這個時間庫,下面寫下這個庫的具體用法. git ...
SQL腳本--有關壓縮數(shù)據(jù)庫日志
/*--壓縮數(shù)據(jù)庫的通用存儲過程??壓縮日志及數(shù)據(jù)庫文件大小?因為要對數(shù)據(jù)庫進行分離處理?所以存儲過程不能創(chuàng)建在被壓縮的數(shù)據(jù)庫中 --鄒建 2004.03(引用請保留此信息)--*/ /*--調用示例 ...
sematext
https://sematext.atlassian.net/wiki/display/PUBLOGSENE/Syslog
Expert Shell Scripting
Expert Shell Scripting 好好學習這本書
CSS與HTML5響應式圖片
隨著?Retina 屏幕的逐漸普及,網(wǎng)頁中對圖片的適配要求也越來越高.如何讓圖片在放大了兩倍的?Retina?屏幕顯示依然清晰,曾經一度困擾著網(wǎng)頁開發(fā)者,好在?CSS3 與 HTML5 已經著力在改變 ...
Hadoop集群的hbase介紹、搭建、環(huán)境、安裝
1.hbase的介紹(自行百度hbase,比我總結的全面具體) HBase – Hadoop Database,是一個高可靠性.高性能.面向列.可伸縮的分布式存儲系統(tǒng),利用HBase技術可在廉價PC ...
HTTP Get與Post的本質區(qū)別
作者:Larry鏈接:https://zhuanlan.zhihu.com/p/22536382來源:知乎著作權歸作者所有.商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處. GET和POST是HTT ...
利用kibana插件對Elasticsearch查詢
利用kibana插件對Elasticsearch查詢 Elasticsearch是功能非常強大的搜索引擎,使用它的目的就是為了快速的查詢到需要的數(shù)據(jù). 查詢分類: 基本查詢:使用Elasticsear ...
總結
以上是生活随笔為你收集整理的ccf命令行选项只能用c实现_CCF-201403-3-命令行选项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux怎么才能算telnet成功_怎
- 下一篇: python data frame_Py