본문 바로가기
프로그래밍 언어/C++

문자열 클래스

by 엉덩이싸움 2024. 3. 12.

모두의 코드: 씹어먹는 C++ <4 - 3 스타크래프트 만들자 ①> 예제 https://modoocode.com/188

#include <iostream>
#include <cstring>
#pragma warning(disable:4996)

class string
{
	char* str;
	int len;

public:
	//constructors
	string(char c, int n); //문자 c가 n개 있는 문자열로 정의
	string(const char* s);
	string(const string& s); //복사생성자
	~string(); //소멸자 

	//instance methods
	void add_string(const string& s); //str 뒤에 s를 붙임
	void copy_string(const string& s); //str에 s를 복사함
	void print_string(); //문자열 프린트

};

int main()
{
	string s1('L', 5);
	char* str1 = new char[7]; //str1는 레퍼런스가 아닌 포인터
	strcpy(str1, "MYLOVE");
	string s2(str1);
	string s3 = s1;
	s1.print_string();
	s2.print_string();
	s3.print_string();

	s1.add_string(s2);
	s2.copy_string(s3);
	s1.print_string();
	s2.print_string();

	return 0;
}

string::string(char c, int n) 
{
	len = n;
	str = new char[n + 1];
	for (int i = 0; i < n; i++)
	{
		str[i] = c;
	}
	str[len] = '\0';
}

string::string(const char* s)
{
	delete[]str;
	str = new char[strlen(s) + 1];
	len = strlen(s);
	strcpy(str, s);
}

string::string(const string& s)
{
	len = s.len;
	str = new char[len + 1];
	strcpy(str, s.str);
}

string::~string()
{
	if (str) delete[]str;
}

void string::add_string(const string& s)
{
	char* tmp = new char[len + 1];
	strcpy(tmp, str);
	len += s.len;

	str = new char[len + 1];
	strcpy(str, tmp);
	for (int i = 0; i < s.len; i++)
	{
		str[strlen(tmp) + i] = s.str[i];
	}

	delete[] tmp;
}

void string::copy_string(const string& s)
{
	len = s.len;
	str = new char[len + 1];
	strcpy(str, s.str);
}

void string::print_string()
{
	for (int i = 0; i < len; i++)
	{
		std::cout << str[i];
	}
	std::cout << std::endl;
}

'프로그래밍 언어 > C++' 카테고리의 다른 글

객체지향프로그래밍  (0) 2024.03.06
C++기본기(2)  (4) 2024.02.29
전처리 지시사  (0) 2024.02.25
rand, srand, time을 이용한 난수 생성  (0) 2024.02.15
C++ 기본기(1)  (1) 2024.02.13