Я работаю над личным проектом C ++, и одной из функций является сохранение контактной информации. Когда дело доходит до адреса, я хочу сохранить состояние в формате аббревиатур.
Я работаю над методом, который будет принимать строковый ввод полного имени состояния и возвращать строковое значение двухбуквенного сокращения состояния. Это сказанное, что я проводил мозговой штурм с некоторыми друзьями, чтобы найти лучший способ сделать это. На данный момент я закончил состояния, которые начинаются с ‘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::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;
Обратите внимание, что в типичном случае вы, вероятно, не захотите действительно жестко закодировать все названия состояний и аббревиатуры в ваш исходный код. Возможно, вы хотите иметь имена и сокращения во внешнем файле конфигурации.
Других решений пока нет …