2013-10-23 39 views
0

我正在開發個人C++項目,其中一個功能是保存聯繫信息。說到地址,我希望狀態以其縮寫格式保存。將狀態輸入轉換爲縮寫

我正在接受一個方法,該方法將接受狀態全名的字符串輸入並返回2個字符狀態縮寫的字符串值。這就是說,我一直在與一些朋友一起腦力激盪,以達到這個目的的最佳方式。截至目前,我已經完成了以'A'開頭的州;但在我通過其他47個州之前,我想通過問這個問題來擴大我的頭腦風暴。如果有一個「更好」或更有效的方法來實現這一目標?請看看我的功能到目前爲止。

std::string Address::formatStateInput(std::string stateInput){ 
     char firstLetter = toupper(stateInput.at(0)); //makes first character capital for easy checking 
     if(firstLetter == 'A'){ 
     char letterToCheck = toupper(stateInput.at(3)); //makes fourth character capital for easy checking 
      //Alabama 
      if (letterToCheck == 'B'){ 
       return "AL";  
      } 
      //Alaska 
      else if (letterToCheck == 'S'){ 
       return "AK"; 
      } 
      //Arizona 
      else if (letterToCheck == 'Z'){ 
       return "AZ"; 
      } 
      else{ 
       return "NULL"; 
      } 
     } 
     else{return "NULL";} 
    } 
+0

給我們一個你傳遞給方法的字符串的例子。 – 0x499602D2

+0

通過該方法的字符串將是50個美國國家之一的名稱(還沒有足夠接受所有國家),如「阿拉巴馬州」。 –

回答

3

我會用一個std::map(或std::unordered_map)。

std::map<std::string, std::string> abbrs; 

abbrs["Alabama"] = "AL"; 
abbrs["Alaska"] = "AK"; 
abbrs["Arizona"] = "AZ"; 
// ... 

然後查找一個州的縮寫,你會做這樣的事情:

auto pos = abbrs.find(user_input_state_name); 
if (pos == abbrs.end()) 
    error_invalid_state_name(user_input_state_name); 
else 
    abbreviation = *pos; 

注意,在一般情況下,你可能不希望真正的硬編碼的所有狀態名稱和縮寫到您的源代碼中。您可能希望在外部配置文件中具有名稱和縮寫。

+0

有了這個解決方案,輸入必須用首字母大寫格式完全格式化,其餘字符小寫。 –

+0

@Juken:是的 - 你通常要分開照顧(例如,選擇全部小寫字母比較容易) –

+0

確實如此。如果我以後也需要完整的國家名稱,我想這也會派上用場。 –