[C++] 문자열 클래스 비교(string vs char[](char*) vs stringstream)

Gamchan Kang·2023년 4월 12일
0

C++

목록 보기
10/11
post-thumbnail

chatGPT와의 채팅을 번역/편집해봤다.

1. std::string vschar[] vs std::stringstream

char[]는 문자의 배열이며 C++에서 가장 기초적인 데이터 형태이다. 문자의 배열(문자열)을 저장하는데 사용하지만 몇 가지 제한 사항이 있다. 그 중 가장 주요한 제한 사항은 컴파일 타임에서 배열의 크기가 정해져야 한다. 만약 문자열 크기를 변경하고 싶으면 새로운 문자열을 만들고 이 문자열에 복사해야 한다.

std::string은 문자열을 저장/수정하기 위한 동적 배열이다. char[]와는 다르게, std::string은 런타임동안 사이즈가 변경될 수 있어 매우 유연하다. std::stringsubstr(), find(), replace()와 같은 문자열 조작이 가능한 함수를 멤버로 가지고 있다. std::string 은 modern C++ 코드에서 char[]보다 자주 쓰인다.

std::stringstream은 데이터 흐름(data stream)처럼 문자열을 다루기 위한 클래스이다. 입/출력 스트림처럼 문자열을 읽고 쓸수 있다(read/write 동작). 문자열 파싱(분리)나 다른 타입 데이터를 변환하기에 용이하다. std::stringstreamstd::string, char[]으로 생성될 수 있으며, 내부 데이터는 str() 함수를 사용해서 std::string으로 return 될 수 있다.


1. 변환

1-1 char[] - std::string

char[] -> std::string

char char_array[] = "Hello";
std::string str(char_array);

std::string -> char[]

#include <cstring>	// or <string.h>

std::string str = "Hello";
const char* char_ptr = str.c_str();
char char_array[str.length() + 1];
strcpy(char_array, char_ptr);


1-2 std::stringstream - std::string

std::string => std::stringstream

#include <sstream>

std::string str = "Hello";
std::stringstream ss(str);

std::stringstream => std::string

#include <sstream>

std::stringstream ss;
ss << "Hello";
std::string str = ss.str();


1-3 char[] - std::stringstream

char[] => std::stringstream

#include <cstring>		// or <string.h>
#include <sstream>

char char_array[] = "Hello";
std::stringstream ss;
ss << char_array;

std::stringstream => char[]

char[]std::stringstream에 삽입하면 널 종료 문자열(null-terminated string)로 취급한다. 이는 std::stringstream 이 널 문자('\0')를 만날 때까지 char[]의 문자를 읽는다는 뜻이다. 만약 char[]에 널 문자가 없다면, std::stringstreamchar[] 끝 너머 문자를 읽어 Logical Error가 일어난다.

profile
Someday, the dream will come true

0개의 댓글