Преобразование ввода состояния в аббревиатуру

Я работаю над личным проектом 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";}
}

0

Решение

Я бы использовал 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;

Обратите внимание, что в типичном случае вы, вероятно, не захотите действительно жестко закодировать все названия состояний и аббревиатуры в ваш исходный код. Возможно, вы хотите иметь имена и сокращения во внешнем файле конфигурации.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]