게임 개발 메모장
[ C++ ] String 에 대해서 본문
char
우선 char라는 변수 선언부터 언급해야 하는데 char은 문자라는 1-byte의 변수이다.
즉 단어 하나를 뜻하는 것이며 더 나아가 2-byte인 한글과는 문자 길이가 맞지 않아
깨진 것을 확인 할 수 있다.
또 char값에 정수를 대입해도 정수로 받아 들이는 것이 아닌 ASCII 코드로 해석한다.
char a = 65;
cout<<"a의 값은 : " <<a<<endl;
/*
출력
a의 값은 : A
*/
Char*
char*는 문자열을 나타내는 것이며 글자 여러개가 계속 이어진 값을 가질 수 있다. 문자의 포인터 변수는 문자열을 담기 위해 사용한다.
char * str ="가나다라마바사" 일 때 포인터가 변수는 첫 글자 이자 문자열의 시작 주소(가나다라마바사에서 '가')를 가리킨다. 또한 문자열 끝의 경우에는 마지막 지정 문자가 들어간다.
char* p ="abcd";
cout<<p[0]<<endl;
cout<<p[1]<<endl;
cout<<p[2]<<endl;
cout<<p[3]<<endl;
cout<<p<<endl;
cout<<p+1<<endl;
cout<<p+2<<endl;
cout<<p+3<<endl;
/* 출력
Error
Error
Error
Error
abcd
bcd
cd
d
*/
더 나아가 char*은 포인터 변수 이므로 직접적인 변수에는 접근 및 수정할 수 없고 읽을 수만 있다.
p[0], p[1]와 같이 직접 접근은 실행 시 오류 발생 할 것이고 p+1, p+2 같은 경우에는 시작점이 a에서 b 그리고 c로 포인터 변수의 시작 주소가 바뀌는 것 이기 때문에 문자가 하나하나 줄어들며 출력이 된다.
char[]
char*와 같이 문자열을 나타내는 것은 똑같으나 포인터 변수가 아닌 배열을 통해 나타내는 것이다. 즉 주소값에 대해서 접근하는 것이 아니기 때문에 char*와 큰 차이점은 문자열 하나하나 수정이 가능하다는 점이다.
여기서도 문자열을 5개로 선언한 이유는 끝에 마지막 지정 문자가 들어가기 때문이다.
또한 char[] 선언에서는 꼭 크기를 정해주어야 한다.
char p[5] ="abcd";
cout<<p<<endl;
p[2]='z';
cout<<p<<endl;
/*출력
abcd
abzd
*/
/*
p[4] ="abcd"일 때에는 error: initializer-string for array of chars is too long [-fpermissive] 길이가 맞지 않는 에러가 발생한다.
*/
string
char[]은 struct를 사용하고 string은 class의 객체이다. 그렇기 때문에 string을 활용하기 위해서는 #include<string.h> 라이브러리를 include하여 사용해야 하고 cout을 통해 출력되는 결과물이 같더라도 각각 변환을 위해서는 생성자나 메소드를 활용해야 한다.
확실한 차이점이라면 char[] str일 경우 해당 배열의 크기는 strlen(str), string str 경우에는 str.size()이고 char[]에서는 사용할 수 없었던 문자열 처리를 쉽게 할 수 있도록 도와준다.
string tempstr ="c++ 알고리즘이 재밌다!";
string tempstr2 ="Java 알고리즘이 재밌다!";
tempstr2 = tempstr; // tempstr2는 c++ 알고리즘이 재밌다로 덮어쓰기 된다.
string str = tempstr+" 그리고 "+ tempstr2; // c++ 알고리즘이 재밌다! 그리고 java 알고리즘이 재밌다!
와 같은 수식 기호를 이용해 나타 낼 수 있다. 그 외에에도 string 라이브러리 안의 find, substr 같은 어떠한 문자열을 찾거나 잘라낼 때 도움이 되는 함수들이 많다.
'언리얼 엔진 > C++' 카테고리의 다른 글
[ C++ ] operator 복합 대입 연산자와 이동 대입 연산자 (0) | 2024.01.04 |
---|---|
[ C++ ] operator 대입연산자 (1) | 2024.01.02 |
[ C++ ] const 와 constexpr 용법 (0) | 2024.01.02 |
[ C++ ] 게임에서 동기와 비동기 예시 (0) | 2024.01.01 |
[ C++ ] TTuple (0) | 2023.12.30 |