我使用getopt來解析命令行參數,我的問題是我的一些選項有選項。我的項目是測試映射的不同後端實現,-b標誌指定要使用的實現。大多數選項都很簡單,但對於使用散列表(鏈接和打開)的後端,還有一個附加的數字可以添加到最後以指定加載因子。所以這將是-b chained-0.75
。當選項有選項時使用getopt C++
我的想法是,我會從8到最後(或5爲「打開」選項)的子字符串,因爲它會忽略字符串的「鏈接」部分,然後使用atof()來轉換它加倍,然後宣佈我的地圖。我相信optarg是一個字符數組(?),並且即使我嘗試過std::string str(optarg);
,我仍然遇到類型不匹配錯誤,我也不知道要寫什麼來代替else if (strcasecmp(optarg, "chained") == 0)
,因爲在它的結尾可能有任何數字。所以現在當我做-b chained-0.75
它調用使用函數。
這是我到目前爲止有:
while ((c = getopt(argc, argv, "hb:n:p:")) != -1) {
switch (c) {
case 'b':
if (strcasecmp(optarg, "unsorted") == 0) {
map = new UnsortedMap();
} else if (strcasecmp(optarg, "sorted") == 0) {
map = new SortedMap();
} else if (strcasecmp(optarg, "bst") == 0) {
map = new BSTMap();
} else if (strcasecmp(optarg, "unordered") == 0) {
map = new UnorderedMap();
} else if (strcasecmp(optarg, "chained") == 0) {
double load_factor;
std::string str(optarg);
std::string ld_str = str.substr(8, str.length()-1);
load_factor = atof(ld_str);
map = new ChainedMap(load_factor);
} else if (strcasecmp(optarg, "open") == 0) {
map = new OpenMap();
} else {
usage(1);
}
break;
任何提示或想法,將不勝感激!
這正是我所需要的,解決了我的一個問題 - 謝謝! – Catherine