2013-10-23 10 views
0

개인 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

메서드에 전달한 문자열의 예를 들어 보겠습니다. – 0x499602D2

+0

메소드를 통과 할 문자열은 "알라바마"와 같이 미국 50 개국 중 하나의 이름입니다 (모든 국가를 수용 할만큼 충분히 멀리 있지는 않음). –

답변

3

내가 사용하는 것 인 std::map (또는 std::unordered_map). 일반적인 경우에, 당신은 아마 정말 열심히 코드의 모든 상태를 싶지 않아

auto pos = abbrs.find(user_input_state_name); 
if (pos == abbrs.end()) 
    error_invalid_state_name(user_input_state_name); 
else 
    abbreviation = *pos; 

참고 :

std::map<std::string, std::string> abbrs; 

abbrs["Alabama"] = "AL"; 
abbrs["Alaska"] = "AK"; 
abbrs["Arizona"] = "AZ"; 
// ... 

그런 상태의 약어를 찾기 위해, 당신은 뭔가를 할 것 이름 및 약어를 소스 코드에 추가하십시오. 아마도 외부 구성 파일에 이름과 약어가 있어야 할 것입니다.

+0

이 솔루션을 사용하면 첫 글자의 대문자와 나머지 글자를 완벽하게 입력 형식으로 입력해야합니다. –

+0

@ 주펜 : 예 - 대개 별도로 처리하고 싶습니다 (예 : 모든 소문자를 선택하는 것이 더 쉽지만) –

+0

참. 나중에 전체 주 이름이 필요할 경우 편리하게 사용할 수 있습니다. –