티스토리 뷰

반응형

표준 string 클래스

 

C++에서는 라이브러리가 많다. 그 중 표준 라이브러리에서 string이라는 이름의 클래스가 정의되어 있다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>

using namespace std;

int main(void)
{
	string str1 = "I like ";
	string str2 = "stringclass";
	string str3 = str1 + str2;

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

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

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

 

예제를 통해 string 클래스가 여러 가지 역할을 할 수 있음을 보여준다.

 

 

12-2 문자열 처리 클래스의 정의

표준 string 클래스의 분석

 

하나. 문자열을 인자로 전달받는 생성자의 정의

string str1="I like ";

 

이는 문자열을 전달받는 생성자의 호출로 이어진다

->string str("I like ");

 

둘, 생성자, 소멸자,복사 생성자 그리고 대입 연산자의 정의

 전달할 문자의 길이가 일정치 않기 떄문에 동적 할당이 필요하다.

그리고 소멸자를 정의해야하며, 깊은 복사가 필요하다.

 

셋, 결합된 문자열로 초기화된 객체를 반환하는 +연산자의 오버로딩

string str3=str1+str2;

 

-문자열의 주소값(str1과 str2가 지니고 있는 문자열을 합한 문자열의 주소값)

-string 객체(str1과 str2가 지니고 있는 문자열을 합한 문자열을 저장하고 있는 객체)

 

넷, 문자열에 덧붙이는 += 연산자의 오버로딩

str1+=str2;

 

다섯, 내용비교를 진행하는 ==연산자의 오버로딩

 

여섯, 콘솔입출력이 가능하도록 <<, >> 연산자의 오버로딩

#include <iostream>
#include <string>

using namespace std;

class String
{
private:
	int len;
	char* str;
public:
	String();
	String(const char* s);
	String(const String& s);
	~String();
	String& operator=(const String& s);
	String& operator+=(const String& s);
	bool operator==(const String& s);
	String operator+(const String& s);

	friend ostream& operator<< (ostream & os, const String & s);
	friend istream& operator>>(istream& is, String& s);
};

 

String::String()
{
	len = 0;
	str = NULL;
}

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

String::String(const String& s)
{
	len = s.len;
	str = new char[len];
	strcpy(str, 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(str, s.str);
	return *this;
}

String& String::operator+=(const String& s)
{
	len += (s.len - 1);
	char* tempstr = new char[len];
	strcpy(tempstr, str);
	strcat(tempstr, s.str);

	if (str != NULL)
		delete[]str;
	str = tempstr;
	return *this;
}

bool String::operator==(const String& s)
{
	return strcmp(str, s.str) ? false :true;
}

String String::operator+(const String& s)
{
	char* tempstr = new char[len + s.len - 1];
	strcpy(tempstr, str);
	strcat(tempstr, s.str);

	String temp(tempstr);
	delete[]tempstr;
	return temp;
}

ostream& operator<<(ostream os, const String& s)
{
	os << s.str;
	return os;
}
istream& operator>>(istream& is, String& s)
{
	char str[100];
	is >> str;
	s = String(str);
	return is;
}
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
반응형