본문 바로가기
<개인공부>/[C++]

[C++] string 클래스 변환(atoi, c_str()) 등 정리

by 사용자 BlockDMask 2017. 7. 11.
반응형
  • C++에서 string, char *, int 간의 변환에 대해서 알아보겠습니다.

(char* -> int 로 바꾸는 것을 보고싶다면, [바로가기])

(string -> int 로 바꾸는 것을 보고싶다면, [바로가기])

(int -> string 으로 바로 바꾸는 것을 보고싶다면 [바로가기])

(C++ string에 대한 총정리가 보고싶다면 [바로가기])


1) 함수 설명

  • int atoi (const char * str)
    헤더파일(C) : <stdlib.h>

    헤더파일(CPP) : <cstdlib>
    설명 : C style의 문자열을 입력받아서 int (숫자) 타입으로 변환하여 리턴한다.

  • std::string c_str()
    반환형이 char * 이므로, 해당하는 string의 첫번재 문자의 주소값(포인터)를 반환합니다.

    사용방법은 아래에 나와있습니다.

2) TEST

  • 헤더파일 : <cstdlib>, <string>, <iostream>

  • 이름공간 : using namespace std;f

{Test 1} char* --> string 

  • C style의 char * 형을 C++ style의 string 으로 변환.

1
2
3
4
5
char * cStr = "Cstring";
string cppStr = cStr;
 
cout << "[test1] : char * --> string " << endl;
cout << "==> cppStr : " << cppStr << endl << endl;
cs


Test 1 : 결과


{Test 2} string --> char *
  • C++의 string을 C style의 char * 형으로 변환.
1
2
3
4
5
6
string cppStr = "CPPstring";
const char * cStr2 = cppStr.c_str();
 
cout << "[test2] : string --> char *" << endl;
printf("==> printf > cStr2 : %s\n", cStr2);
cout << "==> cout > cStr2 : " << cStr2 << endl << endl;
cs


Test 2 : 결과

{Test 3} char * --> int
  • C style의 char * 를 int 타입으로 변환.
1
2
3
4
5
char * cStr = "20170711";
int num = atoi(cStr);
 
printf("printf : %d\n"++num);  //증가 후 출력.
cout <<"cout : "<< ++num << endl;//증가 후 출력
cs


Test 3 : 결과



{Test 4} string --> char * --> int (한번에 int로 변환)
  • C++의 string을 int 타입으로 한번에 변환.
1
2
3
4
5
string s = "2017";
int num = atoi(s.c_str());
 
printf("printf : %d\n"++num);     //증가 후 출력
cout << "cout : " << ++num << endl//증가 후 출력.
cs

Test 4 : 결과


**C++에서 string을 공부하다가, string 변환에 대해서 테스트 해보고 정리 해보았습니다.
**char * 는 C/C++ 둘다 존재 하므로 C style이라고 언급하였고, 
**string 클래스는 C++에만 존재하므로 C++ style이라고 언급하였습니다.
- 문자열을 다룰때
C에서는 char * 형으로 다루고, C++에서는 string으로 다루기 때문에 C style, C++ style이라고 언급하였습니다.
만약 이러한 표현이 불편하시다면, 댓글로 남겨주시면 추후 수정하도록 하겠습니다. 


반응형

댓글5

  • zz 2018.03.23 18:03

    안녕하세요 코딩을 하다가 궁금한 점이 생겼는데 string에서 int로 바꿀때 날짜를 2018-03 이라고 하였는데 2018만 int 로 넘어가더라구요. 그래서 혹시 03부분을 살리려면 어떻게 해야하는지 알려주실 수 있나요 ??
    답글

    • 음.. 지금 바로 떠오르는 것은 물어보신것 처럼 정해진 형태가 있는 문자열 상황이라면 string클래스의 substr을 이용해서 각각 얻어오는 방식이 있을듯 싶습니다. 좀더 효율적인 방법을 생각하신다면 "string parsing" 이나 "string tokenizer" 로 검색해보시면 나옵니다. 도움이 되었길 바랍니다..

    • zz 2018.03.23 18:56

      감사합니다.

  • 2020.02.07 03:38

    비밀댓글입니다
    답글

  • beaber 2020.02.07 03:52

    string형을 int형으로 바꾸려고합니다. sha알고리즘에 서 나온 해시값이 string형인데 int형으로 바꾸려고 합니다. 그런데 위에 test4번 방법으로 바꾸니까 숫자가 너무 작더라고요. 이게 무슨 문제점인가요? 해시값처럼 너무 긴거는 불가능 한가요?
    답글