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";}
    }
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 回答