0

私は個人的な C++ プロジェクトに取り組んでおり、機能の 1 つは連絡先情報を保存することです。住所に関しては、州を省略形で保存したいと考えています。

州の完全な名前の文字列入力を受け入れ、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";}
    }
4

1 に答える 1

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;

典型的なケースでは、おそらくすべての州名と略語をソース コードにハード コードすることは望ましくないことに注意してください。おそらく、外部構成ファイルに名前と略語を入れたいと思うでしょう。

于 2013-10-23T23:41:29.870 に答える