새소식

언어/C++

c++ string 소문자 대문자 변환 방법 총 정리

  • -

c++ string 소문자, 대문자 변환 (raw)

아스키 코드 값을 이용하여 대, 소문자 변환을 할 수 있습니다
대문자 A의 아스키 코드 값은 65, 소문자 아스키 코드 값은 97 입니다
즉 아스키 코드 값의 차이는 32가 나게 됩니다
이를 이용하여 대소문자 변환을 할 수 있습니다

소문자 변환1

대문자 -> 소문자 변환은 32를 더해주면 됩니다. 대문자인 경우에만 변환하도록 if 문을 추가 하였습니다

void main() {
    string str = "ABC";

    cout << "Origin " << str << endl;
    for (int i = 0; i < str.size(); i++) {
        if ('A' <= str[i] && str[i] <= 'Z') {
            str[i] += 32;
        }
    }

    cout << "Change " << str << endl;
}

소문자 변환2

아래 처럼 가능한 이유는 A-Z 값은 65-96의 값입니다
이를 이진수로 바꾸게 되면 1000001 ~ 1011111 입니다
OR 하는수 32는 0100000 이므로 더하는 것과 같은 효과가 있습니다

string str = "ABC";

for (char& ch : str) {
    if ('A' <= ch && 'Z' >= ch) {
        ch |= 32;
    }
}

 

 

대문자 변환

소문자 -> 대문자 변환은 위와 같은 방식이지만 반 대로 빼주면 됩니다

void main() {
    string str = "abc";

    cout << "Origin " << str << endl;
    for (int i = 0; i < str.size(); i++) {
        str[i] -= 32;
    }

    cout << "Change " << str << endl;
}

c++ string 소문자, 대문자 변환 (tolower, toupper)

위 처럼 아스키 코드 값을 이용할 수도 있지만
이미 만들어진 함수를 이용해 변환할 수도 있습니다
그러면 아스키 코드 값의 차이를 몰라도 쉽게 변환할 수 있겠죠??

소문자 변환 (tolower 함수)

    string str = "ABC";

    cout << "Origin " << str << endl;
    for (int i = 0; i < str.size(); i++) {
        str[i] = tolower(str[i]);
    }

    cout << "Change " << str << endl;

대문자 변환 (toupper 함수)

    string str = "abc";

    cout << "Origin " << str << endl;
    for (int i = 0; i < str.size(); i++) {
        str[i] = toupper(str[i]);
    }

    cout << "Change " << str << endl;
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.