[C++] int <-> string(char) 간의 형변환 (+자료형 확인 함수)

gogori6565·2022년 7월 19일
0

int <-> string 간 형변환

📌 to_string() : int -> string

👉to_string() : int -> string 으로 변환한다!

#include<string>

int num=10;
string str=to_string(num);
cout<<str;

10이 출력되지만 int 자료형이 아닌 string 자료형이다!

  • 헤더파일(C++) : <string>

📌 stoi() : string -> int

👉stoi() : string -> int 으로 변환한다!

#include<string>

string str="123456789:;
stoi(str);
  • 헤더파일(C++) : <string>

📌 atoi()와 c_str() : string -> int

👉atoi() : char형 문자열 -> int 으로 변환한다!

#include<string>

char ch[20]="123456789";
atoi(ch) //char형 문자열의 경우 c_str()이 필요없다.

🛑 atoi() 함수는 본래 char형 문자열 -> int 로 바꿔주는 함수이다. 따라서 string을 바꿀 경우 .c_str() 함수가 같이 필요한 것이다.


👉atoi(str 타입 변수.c_str()) : string -> int 으로 변환한다!

#include<string>

string str="123";
int num=atoi(str.c_str());
cout<<num<<"\n";

123int 자료형으로 출력된다!

  • atoi() 함수는 헤더 #include<stdlib.h> 를 사용해야한다.

int atoi(const char* str)

: C style의 문자열을 입력받아서 int 타입으로 변환해 리턴

  • 헤더파일(C) : <stdlib.h>
  • 헤더파일(C++) : <string>

std::string c_str()

: 반환형이 char* 이므로, 해당하는 string의 첫번째 문자의 주소값(포인터)를 반환

  • 반환형이 char* 니까, atoi(str)만 하면 안돼! 그래서 atoi(str.c_str()) 로 해줘야해

char <-> int 간 형변환

📌 char - '0' : char -> int

문자를 정수로 변환하려면, 0의 아스키코드 값을 빼주면 된다.

int num = str[0] - '0'; //str[0]의 문자 '0'을 정수 0으로 변환
int num = str[1] - '0'; //str[1]의 문자 '3'을 정수 3으로 변환

+) 뭣도 모르고 그냥 형변환하면 int num=(int)str[0] 0의 아스키 코드값 = 48이 출력됩니다~ 경험담

📌 int + '0' : int -> char

반대로 int 형 값에 0의 아스키코드 값(48)을 더해주면 char 형이 된다.

char ch = 0 + '0'  //정수 0이 문자 '0'으로 변환
char ch = 3 + '0'  //정수 3이 문자 '3'으로 변환

typeid().name() : C++ 자료형 확인

#include<typeinfo>
int num=10;
cout<<typeid(num).name();

❔왜 제대로 안떠❓
inti 로, charc 로 출력되는 이상한..
=> gcc 컴파일러를 사용한 VSCODE는 컴파일 과정에서 int를 i로 바꿔 그대로 출력하는 오류가 있어 gcc 컴파일러에서 typeid를 사용하는 건 안전하지 않다!

profile
p(´∇`)q

0개의 댓글