問題描述
試題編號:
201403-3
試題名稱:
命令列選項
時間限制:
1.0s
記憶體限制:
256.0mb
問題描述:
問題描述
請你寫乙個命令列分析程式,用以分析給定的命令列裡包含哪些選項。每個命令列由若干個字串組成,它們之間恰好由乙個空格分隔。這些字串中的第乙個為該命令列工具的名字,由小寫字母組成,你的程式不用對它進行處理。在工具名字之後可能會包含若干選項,然後可能會包含一 些不是選項的引數。
選項有兩類:帶引數的選項和不帶引數的選項。乙個合法的無引數選項的形式是乙個減號後面跟單個小寫字母,如"-a" 或"-b"。而帶引數選項則由兩個由空格分隔的字串構成,前者的格式要求與無引數選項相同,後者則是該選項的引數,是由小寫字母,數字和減號組成的非空字串。
該命令列工具的作者提供給你乙個格式字串以指定他的命令列工具需要接受哪些選項。這個字串由若干小寫字母和冒號組成,其中的每個小寫字母表示乙個該程式接受的選項。如果該小寫字母後面緊跟了乙個冒號,它就表示乙個帶引數的選項,否則則為不帶引數的選項。例如, "ab:m:" 表示該程式接受三種選項,即"-a"(不帶引數),"-b"(帶引數), 以及"-m"(帶引數)。
命令列工具的作者準備了若干條命令列用以測試你的程式。對於每個命令列,你的工具應當一直向後分析。當你的工具遇到某個字串既不是合法的選項,又不是某個合法選項的引數時,分析就停止。命令列剩餘的未分析部分不構成該命令的選項,因此你的程式應當忽略它們。
輸入格式
輸入的第一行是乙個格式字串,它至少包含乙個字元,且長度不超過 52。格式字串只包含小寫字母和冒號,保證每個小寫字母至多出現一次,不會有兩個相鄰的冒號,也不會以冒號開頭。
輸入的第二行是乙個正整數 n(1 ≤ n ≤ 20),表示你需要處理的命令列的個數。
接下來有 n 行,每行是乙個待處理的命令列,它包括不超過 256 個字元。該命令列一定是若干個由單個空格分隔的字串構成,每個字串裡只包含小寫字母,數字和減號。
輸出格式
輸出有 n 行。其中第 i 行以"case i:" 開始,然後應當有恰好乙個空格,然後應當按照字母公升序輸出該命令列中用到的所有選項的名稱,對於帶引數的選項,在輸出它的名稱之後還要輸出它的引數。如果乙個選項在命令列中出現了多次,只輸出一次。如果乙個帶引數的選項在命令列中出 現了多次,只輸出最後一次出現時所帶的引數。
樣例輸入
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
答案:已知格式字串只包含小寫字母和:,所以用乙個包含26個元素的陣列儲存格式字串中的字元,陣列下標代表26個小寫字母,如果陣列中對應的值為0,代表該格式字串中不存在陣列下表代表的字母,如果值為1,代表無參選項,如果值為2,代表有參選項。
用乙個map來儲存解析後的命令列選項,鍵為命令列選項的小寫字母,鍵所對應的值為相應的引數,若選項沒有引數,則將鍵所對應的值設定為大寫字母「x」(因為引數中只含小寫字母,數字和減號,所以用大寫字母不會混淆有參選項和無參選項。當然這裡用任意的除小寫字母,數字和減號之外的字元都可以)
#include #include #include #include using namespace std;
int main()
else
}//解析格式字串,存入format陣列中
int n;
cin >> n;
cin.get();
for (int i = 0; i < n; i++)//處理命令列工具名稱
j++;
while (j < s.size() && s[j] == '-')//如果不帶引數,則將該選項的字母加入到map中,用x表示不帶引數
else
if (j < s.size() && s[j] != ' ')
break;
else
}else
break;
}//如果帶引數,則解析引數,並將該選項的字母和引數加入到map中,字母為鍵,引數為值。}}
else
break;
}//命令列處理完畢
cout << "case " << (i+1) << ": ";
map::iterator index = m.begin();
while (index != m.end())
cout << endl;//輸出
} return 0;
}
CCF CSP 命令列選項(201403 3)
問題描述 請你寫乙個命令列分析程式,用以分析給定的命令列裡包含哪些選項。每個命令列由若干個字串組成,它們之間恰好由乙個空格分隔。這些字串中的第乙個為該命令列工具的名字,由小寫字母組成,你的程式不用對它進行處理。在工具名字之後可能會包含若干選項,然後可能會包含一 些不是選項的引數。選項有兩類 帶引數的...
201403 3 命令列選項 模擬
請你寫乙個命令列分析程式,用以分析給定的命令列裡包含哪些選項。每個命令列由若干個字串組成,它們之間恰好由乙個空格分隔。這些字串中的第乙個為該命令列工具的名字,由小寫字母組成,你的程式不用對它進行處理。在工具名字之後可能會包含若干選項,然後可能會包含一些不是選項的引數。選項有兩類 帶引數的選項和不帶引...
CCF2014 03 3命令列選項
問題描述 請你寫乙個命令列分析程式,用以分析給定的命令列裡包含哪些選項。每個命令列由若干個字串組成,它們之間恰好由乙個空格分隔。這些字串中的第乙個為該命令列工具的名字,由小寫字母組成,你的程式不用對它進行處理。在工具名字之後可能會包含若干選項,然後可能會包含一 些不是選項的引數。選項有兩類 帶引數的...