Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

게임 개발 메모장

[ C++ ] String 에 대해서 본문

언리얼 엔진/C++

[ C++ ] String 에 대해서

Dev_Moses 2024. 1. 2. 00:25

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 같은 어떠한 문자열을 찾거나 잘라낼 때 도움이 되는 함수들이 많다.