将State的输入转换为缩写

时间:2013-10-23 23:33:01

标签: c++ string user-input input-sanitization

我正在开发个人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";}
    }

1 个答案:

答案 0 :(得分: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;

请注意,在典型情况下,您可能不希望将所有州名和缩写硬编码到源代码中。您可能希望在外部配置文件中包含名称和缩写。