πŸ‘©‍πŸ’» ν”„λ‘œκ·Έλž˜λ°/🎠 C++

[C++] String 클래슀 λ””μžμΈ

peewoong 2024. 5. 6. 15:57

🟩 ν‘œμ€€ string 클래슀

ν—€λ”νŒŒμΌ <string>을  포함해야 ν•œλ‹€.

string ν΄λž˜μŠ€λŠ” ν‘œμ€€ 클래슀둜써 λ¬Έμžμ—΄μ˜ 처리λ₯Ό μœ„ν•΄ μ œκ³΅λ˜λŠ” 클래슀

 

1. λ¬Έμžμ—΄μ„ 인자둜 μ „λ‹¬λ°›λŠ” μƒμ„±μžμ˜ μ •μ˜

string str1 = "I like "; πŸ‘‰ string str1("I like ");
string str2 = "string class"; πŸ‘‰ string str2("string class");

 

2. μƒμ„±μž, μ†Œλ©Έμž, 볡사 μƒμ„±μž, λŒ€μž… μ—°μ‚°μžμ˜ μ •μ˜

μƒμ„±μž λ‚΄μ—μ„œ λ¬Έμžμ—΄ μ €μž₯을 μœ„ν•œ λ©”λͺ¨λ¦¬μ˜ 동적 할당이 μ΄λ£¨μ–΄μ§€λ―€λ‘œ

 

3. κ²°ν•©λœ λ¬Έμžμ—΄λ‘œ μ΄ˆκΈ°ν™”λœ 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” + μ—°μ‚°μžμ˜ μ˜€λ²„λ‘œλ”©

string str3 = str1 + str2;

str1 + str2의 λ°˜ν™˜κ°’μœΌλ‘œ 두 객체의 λ¬Έμžμ—΄μ„ λͺ¨λ‘ ν¬ν•¨ν•˜λŠ” string 객체가 λ°˜ν™˜λ˜λ„λ‘

 

4. λ¬Έμžμ—΄μ„ λ§λΆ™μ΄λŠ” += μ—°μ‚°μžμ˜ μ˜€λ²„λ‘œλ”©

5. λ‚΄μš© 비ꡐλ₯Ό μ§„ν–‰ν•˜λŠ” == μ—°μ‚°μžμ˜ μ˜€λ²„λ‘œλ”©

6. μ½˜μ†” μž…μΆœλ ₯을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” <<, >> μ—°μ‚°μžμ˜ μ˜€λ²„λ‘œλ”©

 

🟩 string 클래슀의 μ™„μ„±

1. 클래슀 μ„ μ–Έ

class String{
private:
	int len;
    char * str;
    
public:
	Stirng();
    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);
}

 

2. 볡사 μƒμ„±μž, λŒ€μž… μ—°μ‚°μž

String::String(){
	len = 0;
    str = NULL;
}
// 이 μƒμ„±μžλŠ” λ‹€μŒμ˜ ν˜•νƒœλ‘œ 객체 생성을 λ•λŠ”λ‹€. String emptystr;

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;
}