본문 바로가기
열혈강의c++

[ 열혈C++ ] Chapter 12 string 클래스

by 어린왕자1234 2022. 7. 21.

C++의 새로운 표준안

 

표준string  클래스

 

문자열처리 클래스의 정의

표준 string 클래스의 분석

 

String 클래스의 완성1:  클래스의 선언

 

String 클래스의 완성2:  복사생성자,  대입연산자

 

String 클래스의 완성3:  나머지 멤버 함수들

 

String.h

#include <iostream>
using namespace std;
class String
{
	char* str;
	rsize_t len;
public:
	String();                             // default 생성자
	String(const char* s);                // 생성자
	String(const String& s);              // 복사생성자
	~String();                            // 소멸자
	String& operator=(const String& s);   // 대입연산자
	String& operator+=(const String& s);  // 단축연산자
	String operator+(const String& s);    // 덧셈연산자
	bool operator==(const String& s);     // 비교연산자
	friend ostream& operator<<(ostream& ostrm, const String& s);  // <<연산자
	friend istream& operator>>(istream& istrm, String& s);        // >>연산자
};

 

String.cpp

#include "String.h"

String::String()
	:str(NULL), len(0) {}
String::String(const char* s)
{
	len = strlen(s) + 1;
	str = new char[len];
	strcpy_s(str, len, s);
}
String::String(const String& s)
{
	len = s.len;
	str = new char[len];
	strcpy_s(str, len, s.str);
}
String::~String()
{
	if (str != NULL)
		delete[]str;
}
String& String::operator=(const String& s)
{
	if (str != NULL)
		delete[]str;
	len = s.len;
	str = new char[len];
	strcpy_s(str, len, s.str);
	return *this;
}
String& String::operator+=(const String& s)
{
	len += (s.len - 1);
	char* tmp = new char[len];
	strcpy_s(tmp, len, str);
	strcat_s(tmp, len, s.str);
	if (str != NULL)
		delete[]str;
	str = tmp;
	return *this;
}
String String::operator+(const String& s)
{
	rsize_t cat_len = len + s.len - 1;
	char* tmp = new char[cat_len];
	strcpy_s(tmp, cat_len, str);
	strcat_s(tmp, cat_len, s.str);

	String newString(tmp);
	delete[]tmp;
	return newString;
}
bool String::operator==(const String& s)
{
	return strcmp(str, s.str) ? false : true;
}
ostream& operator<<(ostream& ostrm, const String& s)
{
	ostrm << s.str;
	return ostrm;
}
istream& operator>>(istream& istrm, String& s)
{
	char str[100];
	istrm >> str;
	s = String(str);   // 임시객체 사용
	return istrm;
}

 

main.cpp

#include "String.h"

int main(void)
{
	String str1 = "I like ";
	String str2 = "String class";
	String str3 = str1 + str2;

	cout << str1 << endl;
	cout << str2 << endl;
	cout << str3 << endl;

	str1 += str2;
	cout << str1 << endl;

	if (str1 == str3)
		cout << "동일 문자열!" << endl;
	else
		cout << "동일하지 않은 문자열!" << endl;

	String str4;
	cout << "문자열 입력: ";
	cin >> str4;
	cout << "입력한 문자열: " << str4 << endl;
	return 0;
}

main.cpp
0.00MB
String.cpp
0.00MB
String.h
0.00MB