본문 바로가기

프로그래밍 언어/C, C++

cstring vs string

1. 기본 사용법

cstring은 <string.h> 헤더 파일을 추가하여 사용할 수 있고, char*  형식을 따른다.

 - char 형식을 따르므로, cin.getline(s, 100)을 하면, s에는 99개의 문자와 '\0'이 저장된다.

#include <cstring>

void main()
{
    char str[11];
    cin.getline(str, 11);
    cout<<"length : "<<strlen(str)<<'\n';
}

위와 같이 하게 되면, 개행문자(\n)을 포함하게 된다. 

길이를 구할 땐 strlen(str)을 사용한다.

 

 

반면, 

string은 <string> 헤더 파일을 추가하여 사용할 수 있고, string 컨테이너 형식을 따른다.

 

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

void main()
{
    string str;  
    getline(cin, str); // 한줄 읽어 들이기
    //혹은
    cin >> str;        // 개행문자, 공백 앞까지 읽어 들이기(사용에 주의 필요)
    
    cout<<"length : "<<str.length()<<'\n';
}

 

참고로 cin은 개행문자(\n) 혹은 공백(' ') 앞까지만 읽어들이고, 개행문자(\n), 공백(' ')는 버퍼에 남긴다.

따라서, 버퍼를 비워줘야 한다(e.g. cin.ignore())

 

반면, getline()은 개행문자(\n), 공백(' ')등을 버퍼에 남기지 않는다.

길이를 구할땐, str.length()를 사용한다.

 

  cstring string
헤더파일 <string.h> or <cstring> <string>
길이 구할 때 strlen(str) str.length()
입력 cin.getline(str, 11)
or
scanf("%s", str)
getline(cin, str)  cin >> str
특이사항 길이 10 문자열 + '\0' 입력 
(따라서, 전체 길이 11)
개행문자('\n')전까지 한줄을 읽어들인다.

공백도 같이 읽어들인다.
개행문자('\n') 혹은 공백(' ') 전까지 읽어들인다.

delimiter를 버퍼에 남긴다.

Delimeter : 개행문자('\n'), 공백(' ') 과 같은 구분문자를 뜻한다.

 

2. 멤버 함수

  • 2.1 헷갈리는 멤버 함수
// buffer (4) : Inserts a copy of the first n characters in the array of characters pointed by s.	
 string& insert (size_t pos, const char* s, size_t n);
 
// fill (5)	: Inserts n consecutive copies of character c.
 string& insert (size_t pos, size_t n, char c);

첫번째 멤버 함수는 버퍼라고 소개되어 있다. 

const char *s 중에 n개 만을 가져다 쓰겠다는 것이다.

 

두번째 멤버 함수는 fill 이라고 소개되어 있다.

char c 를 n번 삽입하겠다는 뜻이다(여기서 3번째 인자가 문자열이 올수 없음에 주의!!)

 

예시

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

int main()
{
    string str;
    str.insert(0, "Mojito Recipe", 7); //(4) Buffer, "Mojito Recipe" 중에 최초 7글자만 사용
    str.insert(7, 2, '!');             //(5) Fill, '!'를 2번 채운다.
    str.insert(9, "in the Maldives");
    
    cout<<str<<'\n';
}

 

  • 2.2 자주쓰는 멤버 함수
// string -> integer
std::string str = "123";
num = std::stoi(str); // string to integer

//char* -> interger
char str[] = "456";
num = std::atoi(str); // address to integer

//string -> char*
std::string str = "123";
char* str2 = str.c_str();

//char* -> string
char str[] = "456";
string str2 = str;   // 그냥 대입 ㅋ

//num -> string
int num = 123;
std::string str = to_string(num);

 

[Reference]

http://www.cplusplus.com/reference/string/string/insert/

반응형