我正在开发个人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 :(得分: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;
请注意,在典型情况下,您可能不希望将所有州名和缩写硬编码到源代码中。您可能希望在外部配置文件中包含名称和缩写。