프로그래밍 언어/C, C++
cstring vs string
EastHoon
2020. 8. 4. 01:25
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]
반응형