티스토리 뷰

728x90

C/C++에서 가끔씩 사용하지만 다른 언어에서 지원하는 것으로 착각하고 혼란스러워하는 것이 단순한 대소문자 바꾸기이다. 

 

int rlupper(char *str)
{
  if(str == NULL) return -1;
  while(*str != '\0')
  {
    *str = toupper(*str);
    str++;
  }
  return 0;
}

int rllower(char *str)
{
  if(str == NULL) return -1;
  while(*str != '\0')
  {
    *str = tolower(*str);
    str++;
  }
  return 0;
}

전형적인 사용법은 위의 예제 코드처럼 toupper(), tolower() 함수를 사용해서 대문자나 소문자 변환을 하는 방법이다. 문제는 이들 함수는 문자 하나씩을 받아 변환하는 것이라서 위의 코드처럼 문자열 내의 문자들을 하나씩 순차적을 변환해 가야 한다는 점이다. C언어에 적절한 방법이다.

 

std::transform(str.begin(), str.end(), str.begin(), ::toupper);

 

C++에서는 위의 코드처럼 transform()을 활용하여 스트링을 대문자나(::toupper 옵션) 소문자로 (::tolower 옵션) 변환하면 된다. 위의 transform 함수 사용을 설명한다면 str 스트링의 처음부터 끝까지에 toupper 작업을 수행하여 str 스트링에 처음부터 저장하라는 의미이다.

 

std::transform(pVal.begin(), pVal.end(), pVal.begin(), ::tolower);

 

위의 코드는 스트링을 소문자로 변환하는 예제이다.

 

std::transform(pVal.begin(), pVal.end(), std::back_inserter(rst) , ::tolower) 

 

변환 결과를 다른 스트링에 저장하려면 위와 같이 std::back_inserter()를 사용하면 된다.

 

 

 

 

728x90