将状态输入转换为缩写 我正在研究一个个人C++项目,其中一个特性是保存联系信息。说到地址,我希望州政府以缩写形式保存

将状态输入转换为缩写 我正在研究一个个人C++项目,其中一个特性是保存联系信息。说到地址,我希望州政府以缩写形式保存,c++,string,user-input,input-sanitization,C++,String,User Input,Input Sanitization,我正在研究一种方法,该方法将接受州全名的字符串输入,并返回2个字符的州缩写字符串值。话虽如此,我一直在与一些朋友进行头脑风暴,探讨最好的方法。到目前为止,我已经完成了以“A”开头的状态;但在我浏览其他47个州之前,我想通过问这个问题来扩大我的头脑风暴。是否有“更好”或更有效的方法来实现这一点?到目前为止,请看我的函数 std::string Address::formatStateInput(std::string stateInput){ char firstLette

我正在研究一种方法,该方法将接受州全名的字符串输入,并返回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";}
    }

我会使用一个
std::map
(或者
std::unordered_map


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

我将使用
std::map
(或
std::unordered\u map


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

我将使用
std::map
(或
std::unordered\u map


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

我将使用
std::map
(或
std::unordered\u map



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

给我们一个传递给该方法的字符串示例。将传递给该方法的字符串将是50个美国(还不足以接受所有国家)之一的名称,例如“阿拉巴马”。请给我们一个您传递给该方法的字符串的示例。将通过该方法的字符串将是50个美国(还不足以接受所有国家)之一的名称,例如“阿拉巴马州”。请给我们一个您传递给该方法的字符串的示例。将通过该方法的字符串将是50个美国(还不足以接受所有国家)之一的名称,例如“阿拉巴马州”。请给我们一个您传递给该方法的字符串的示例。将通过该方法的字符串将是50个美国(还不足以接受所有国家)之一的名称,例如“阿拉巴马州”。使用此解决方案,输入必须完全格式化,第一个字母大写,其余字符小写。@Juken:是的--您通常希望单独处理(例如,选择所有小写可能更容易)True。我想如果我以后还需要全州名的话,这也会派上用场。问题是它不能处理拼写错误和打字错误。op的方法可以通过这样一种方式进行编码,以最大限度地减少这种情况。使用这种解决方案,输入必须完全格式化,第一个字母大写,其余字符小写。@Juken:是的--您通常希望单独处理(例如,选择所有小写可能更容易)True。我想如果我以后还需要全州名的话,这也会派上用场。问题是它不能处理拼写错误和打字错误。op的方法可以通过这样一种方式进行编码,以最大限度地减少这种情况。使用这种解决方案,输入必须完全格式化,第一个字母大写,其余字符小写。@Juken:是的--您通常希望单独处理(例如,选择所有小写可能更容易)True。我想如果我以后还需要全州名的话,这也会派上用场。问题是它不能处理拼写错误和打字错误。op的方法可以通过这样一种方式进行编码,以最大限度地减少这种情况。使用这种解决方案,输入必须完全格式化,第一个字母大写,其余字符小写。@Juken:是的--您通常希望单独处理(例如,选择所有小写可能更容易)True。我想如果我以后还需要全州名的话,这也会派上用场。问题是它不能处理拼写错误和打字错误。op的方法可以用这样一种方式编码,以尽量减少这种情况
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;