문자

이현진·2023년 4월 8일
0

C++

목록 보기
5/13
post-thumbnail

문자 (char)

멤버 함수

  • tolower(): 영문 대문자를 소문자로 변환
  • toupper(): 영문 소문자를 대문자로 변환


관련 함수

cctype 헤더는 문자가 소문자, 대문자, 알파벳, 숫자임을 판별할 수 있는 함수를 제공한다.

  • isupper(char x): x가 대문자인지 판별한다.
  • islower(char x): x가 소문자인지 판별한다.
  • isalpha(char x): x가 알파벳인지 판별한다.
  • isdigit(char x): x가 숫자인지 판별한다.


아스키 코드 (ASCII)

c++에서도 마찬가지로 특정 문자와 아스키 코드는 일대일로 매칭되어있다. 다만, 아스키코드를 문자로, 문자를 아스키 코드로 변환하는 것에 특수한 함수가 존재하는 것이 아니라, charint 자료형 변환으로 간단히 가능하다.

cout << (int)'A'  // 65
cout << (char)65  // A

아스키 코드 값을 활용한 대소문자 변환

영문 대문자는 65부터, 소문자는 97부터 시작한다. 아스키 코드 값으로 32 차이이다. 32를 더해주면 대문자를 소문자로 변환할 수 있다.

#include <iostream>

int main() {
    // 여기에 코드를 작성해주세요.
    char a = 'A';
    std::cout << (char)(a + 32);
    return 0;
}

소문자에서 대문자로 변환하는 것은 반대로 값을 빼주면 된다.



문자열 (string)

#include <iostream>
#include <string>
using namespace std;

int main() {

	string a;
	cin >> a;
	cout << a;

	return 0;

}
  • c++에서 문자열은 "로 표기한다.
  • 문자열을 사용하기 위해서는 <string> 헤더를 포함시켜야 한다.
  • c++ 표준 라이브러리로, std::를 적어줘야 한다.
  • python과 달리 c++의 문자열은 선언 후에 변경이 가능하다. 따라서 a[3] = 'd'와 같은 문법이 가능하다.

어라? 나는 헤더 없이 됐었는데...
<iostream>과 같은 표준 라이브러리 헤더가 내부적으로 <string>을 포함하고 있거나, 컴파일러가 자체적으로 표준 라이브러리를 제공하는 경우, <string>을 포함시키지 않아도 사용이 가능하다.

단, 다른 헤더나 컴파일러에 의존해서는 환경에 따라 정상적으로 동작하지 않을 수 있으므로 사용할 헤더를 포함시키는 것이 좋다고 한다.



멤버 함수

string iterator

  • 문자열.begin(): 문자열의 시작 주소 반환
  • 문자열.end(): 문자열의 (마지막 + 1) 주소 반환

size 확인

  • 문자열.length(): 문자열의 길이를 반환

string 조작

  • 문자열.append(): 문자열에 다른 문자열을 이어붙임
  • 문자열.substr(int x, int y): 인덱스 x부터 y-1까지 자른 문자열을 반환. y를 입력하지 않으면 x부터 마지막 문자까지 잘라낸다.
  • 문자열.erase(int x, int y): 인덱스 x부터 y개의 문자를 지움. 원본 문자열에도 적용


관련 함수

  • (int)strlen(문자열): 문자열의 길이를 반환. int형으로 변환해야 한다. <string.h>헤더를 포함해야 한다. 문자열.length()와 다르게 문자열이 사용하는 바이트 수를 확인한다. 따라서 한 글자당 2byte (UTF8에서는 3byte)를 차지하는 한글이나 다른 문자의 경우, 사용에 유의해야 한다.
cout << (int)strlen("홍길동")
// 6 (UTF8 -> 9)
  • reverse(시작반복자, 종료반복자): algorithm 라이브러리의 함수이며, 시작반복자 ~ 종료반복자 - 1 범위의 원소들을 거꾸로 뒤집는다.
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
 
int main(void) {
    string str = "AbcDe";
    
    reverse(str.begin(), str.end());
 
    cout << str << endl;
    return 0;
}



문자열의 대소문자 변환

문자열을 통째로 변환해주지는 않기 때문에, 각각의 문자를 변환해야한다.
tolower() 함수를 사용한 예시

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
    string a = "ABC";
    for (int i = 0; i < a.size(); i++) {
    	a[i] = tolower(a[i]);
    }
    std::cout << a;
    return 0;
}



profile
세상의 모든 지식을 담을 때까지

0개의 댓글