¿¬»êÀÚ ¿À¹ö·ÎµùÀÇ Á¾ÇÕ ½Ç½ÀÆíÀ¸·Î ¹®ÀÚ¿À» °ü¸®ÇÏ´Â Str Ŭ·¡½º¸¦ ÀÛ¼ºÇØ º¸ÀÚ. C´Â ¹®ÀÚ¿À» ±âº» ŸÀÔÀ¸·Î Á¦°øÇÏÁö ¾Ê°í ¹®ÀÚÇü ¹è¿·Î Ç¥ÇöÇϱ⠶§¹®¿¡ ´ëÀÔ, ¿¬°á, ºñ±³, Ãß°¡ µîÀÇ ¸ðµç ¿¬»êÀ» ÇÔ¼ö·Î¸¸ ÇØ¾ß ÇÑ´Ù. ±âº» ŸÀÔ°ú ³í¸®ÀûÀ¸·Î °°Àº ¿¬»êÀ» Çϴµ¥µµ ºÒ±¸ÇÏ°í ¿¬»êÀÚ¸¦ ¾µ ¼ö ¾ø¾î ¹«Ã´ ºÒÆíÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¹è¿ÀÇ °æ°è¸¦ ³Ñ¾î¼´Â À§Ç輺À» Ç×»ó °¡Áö°í ÀÖ´Ù.
±×·¡¼ C++¿¡¼´Â º¸Åë ¹®ÀÚ¿À» Ŭ·¡½º·Î ÀÛ¼ºÇϴµ¥ ÀÌ Å¬·¡½º´Â ¹®ÀÚ¿ Ç¥Çö¿¡ ÇÊ¿äÇÑ ¸ðµç ¸â¹ö¸¦ Æ÷ÇÔÇϰí ÀÖÀ¸¸ç ¹®ÀÚ¿ÀÇ ±æÀÌ¿¡ µû¶ó ¹è¿À» ÀÚµ¿À¸·Î ´Ã¸®´Â Æí¸®ÇÑ ±â´É±îÁö °¡Áö°í ÀÖ´Ù. ¶ÇÇÑ ´Ù¾çÇÑ ¿¬»êÀÚ¸¦ ¹®ÀÚ¿¿¡ ´ëÇØ Á÷Á¢ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿© ±âº» ŸÀÔ°ú ¶È°°Àº ¹æ¹ýÀ¸·Î ¹®ÀÚ¿À» ´Ù·ê ¼ö ÀÖ´Ù.
¿©±â¼ ¸¸µé¾î º¼ ¹®ÀÚ¿ Ŭ·¡½º´Â ¾îµð±îÁö³ª ½Ç½À¿ëÀ¸·Î¼ Àǹ̰¡ ÀÖÀ» »ÓÀÌÁö ½ÇÁ¦ »ç¿ëÀ» ¸ñÀûÀ¸·Î Çϱ⿡´Â ¼º´É»óÀ¸·Î º¸³ª Á¦°øÇÏ´Â ±â´ÉÀ¸·Î º¸³ª ¸¹ÀÌ ºÎÁ·ÇÏ´Ù. ¿ì¸®°¡ Á÷Á¢ ÀÌ·± Ŭ·¡½º¸¦ ¸¸µéÁö ¾Ê´õ¶óµµ ´õ Àß ¸¸µé¾îÁø ¹®ÀÚ¿ Ŭ·¡½ºµéÀÌ ¾ó¸¶µçÁö Àִµ¥ STLÀº stringÀ», MFC´Â CStringÀ» °¢°¢ Á¦°øÇϰí ÀÖ´Ù. ½Ç¹«¿¡¼´Â ÀÌ·± Àß ¸¸µé¾îÁø °ËÁõµÈ Ŭ·¡½º¸¦ ¾²µÇ ÀÌ·± Ŭ·¡½ºµéÀÇ ³»ºÎ°¡ ¾î¶°ÇÒÁö¸¦ ÀÌ ½Ç½ÀÀ» ÅëÇØ ¿¬±¸ÇØ º¸µµ·Ï ÇÏÀÚ.
½Ç½À¿ëÀ¸·Î ¸¸µé Ŭ·¡½ºÀÇ À̸§Àº StrÀ̶ó´Â ªÀº À̸§À¸·Î Á¤Çß´Ù. ´ÙÀ½ ¼Ò½º¿¡´Â Str Ŭ·¡½ºÀÇ ¼±¾ð°ú ¸â¹ö ÇÔ¼ö, ¿¬»êÀÚ ÇÔ¼öÀÇ ¸ðµç Äڵ尡 Æ÷ÇԵǾî ÀÖÀ¸¸ç main¿¡´Â ÀÌ Å¬·¡½º°¡ Àß µ¿ÀÛÇÏ´ÂÁö¸¦ Å×½ºÆ®ÇÏ´Â Äڵ嵵 Æ÷ÇԵǾî ÀÖ´Ù. ¿øÄ¢´ë·Î ÇÏÀÚ¸é Çì´õ ÆÄÀϰú ±¸Çö ÆÄÀÏÀ» ³ª´©¾î¾ß ÇÏÁö¸¸ ½Ç½ÀÀÇ ÆíÀǼºÀ» À§ÇØ ÇÑ ¸ðµâ¿¡ ¸ðµç ¼Ò½º¸¦ ÀÛ¼ºÇß´Ù.
|
¿¹ Á¦ : Str |
#include <Turboc.h>
#include <iostream>
using namespace std;
class Str
{
friend ostream &operator <<(ostream &c, const Str &S);
friend const Str operator +(const char *ptr,Str &s);
friend bool operator ==(const char *ptr,Str &s);
friend bool operator !=(const char *ptr,Str &s);
friend bool operator >(const char *ptr,Str &s);
friend bool operator <(const char *ptr,Str &s);
friend bool operator >=(const char *ptr,Str &s);
friend bool operator <=(const char *ptr,Str &s);
protected:
char *buf;
int size;
public:
Str();
Str(const char *ptr);
Str(const Str &Other);
explicit Str(int num);
virtual ~Str();
int length() const { return strlen(buf); }
Str &operator =(const Str &Other);
Str &operator +=(Str &Other);
Str &operator +=(const char *ptr);
char &operator [](int idx) { return buf[idx]; }
const char &operator [](int idx) const { return buf[idx]; }
operator const char *() { return (const char *)buf; }
operator int() { return atoi(buf); }
const Str operator +(Str &Other) const;
const Str operator +(const char *ptr) const { return *this+Str(ptr); }
bool operator ==(Str &Other) { return strcmp(buf,Other.buf)==0; }
bool operator ==(const char *ptr) { return strcmp(buf,ptr)==0; }
bool operator !=(Str &Other) { return strcmp(buf,Other.buf)!=0; }
bool operator !=(const char *ptr) { return strcmp(buf,ptr)!=0; }
bool operator >(Str &Other) { return strcmp(buf,Other.buf)>0; }
bool operator >(const char *ptr) { return strcmp(buf,ptr)>0; }
bool operator <(Str &Other) { return strcmp(buf,Other.buf)<0; }
bool operator <(const char *ptr) { return strcmp(buf,ptr)<0; }
bool operator >=(Str &Other) { return strcmp(buf,Other.buf)>=0; }
bool operator >=(const char *ptr) { return strcmp(buf,ptr)>=0; }
bool operator <=(Str &Other) { return strcmp(buf,Other.buf)<=0; }
bool operator <=(const char *ptr) { return strcmp(buf,ptr)<=0; }
void Format(const char *fmt,...);
};
// µðÆúÆ® »ý¼ºÀÚ
Str::Str()
{
size=1;
buf=new char[size];
buf[0]=0;
}
// ¹®ÀÚ¿·ÎºÎÅÍ »ý¼ºÇϱâ
Str::Str(const char *ptr)
{
size=strlen(ptr)+1;
buf=new char[size];
strcpy(buf,ptr);
}
// º¹»ç »ý¼ºÀÚ
Str::Str(const Str &Other)
{
size=Other.length()+1;
buf=new char[size];
strcpy(buf,Other.buf);
}
// Á¤¼öÇü º¯È¯ »ý¼ºÀÚ
Str::Str(int num)
{
char temp[128];
itoa(num,temp,10);
size=strlen(temp)+1;
buf=new char[size];
strcpy(buf,temp);
}
// ÆÄ±«ÀÚ
Str::~Str()
{
delete [] buf;
}
// ´ëÀÔ ¿¬»êÀÚ
Str &Str::operator =(const Str &Other)
{
if (this != &Other) {
size=Other.length()+1;
delete [] buf;
buf=new char[size];
strcpy(buf,Other.buf);
}
return *this;
}
// º¹ÇÕ ¿¬°á ¿¬»êÀÚ
Str &Str::operator +=(Str &Other)
{
char *old;
old=buf;
size+=Other.length();
buf=new char[size];
strcpy(buf,old);
strcat(buf,Other.buf);
delete [] old;
return *this;
}
Str &Str::operator +=(const char *ptr)
{
return *this+=Str(ptr);
}
// ¿¬°á ¿¬»êÀÚ
const Str Str::operator +(Str &Other) const
{
Str T;
delete [] T.buf;
T.size=length()+Other.length()+1;
T.buf=new char[T.size];
strcpy(T.buf,buf);
strcat(T.buf,(const char *)Other);
return T;
}
// Ãâ·Â ¿¬»êÀÚ
ostream &operator <<(ostream &c, const Str &S)
{
c << S.buf;
return c;
}
// ´õÇÏ±â ¹× °ü°è ¿¬»êÀÚ
const Str operator +(const char *ptr,Str &s) { return Str(ptr)+s;}
bool operator ==(const char *ptr,Str &s) { return strcmp(ptr,s.buf)==0;}
bool operator !=(const char *ptr,Str &s) { return strcmp(ptr,s.buf)!=0;}
bool operator >(const char *ptr,Str &s) { return strcmp(ptr,s.buf)>0;}
bool operator <(const char *ptr,Str &s) { return strcmp(ptr,s.buf)<0;}
bool operator >=(const char *ptr,Str &s) { return strcmp(ptr,s.buf)>=0;}
bool operator <=(const char *ptr,Str &s) { return strcmp(ptr,s.buf)<=0;}
// ¼½Ä Á¶¸³ ÇÔ¼ö
void Str::Format(const char *fmt,...)
{
char temp[1024];
va_list marker;
va_start(marker, fmt);
vsprintf(temp,fmt,marker);
*this=Str(temp);
}
void main()
{
Str s="125";
int k;
k=(int)s+123;
Str s1("¹®ÀÚ¿"); // ¹®ÀÚ¿·Î »ý¼ºÀÚ
Str s2(s1); // º¹»ç »ý¼ºÀÚ
Str s3; // µðÆúÆ® »ý¼ºÀÚ
s3=s1; // ´ëÀÔ ¿¬»êÀÚ
// Ãâ·Â ¿¬»êÀÚ
cout << "s1=" << s1 << ",s2=" << s2 << ",s3=" << s3 << endl;
cout << "±æÀÌ=" << s1 << endl;
// Á¤¼öÇü º¯È¯ »ý¼ºÀÚ¿Í º¯È¯ ¿¬»êÀÚ
Str s4(1234);
cout << "s4=" << s4 << endl;
int num=int(s4)+1;
cout << "num=" << num << endl;
// ¹®ÀÚ¿ ¿¬°á Å×½ºÆ®
Str s5="First";
Str s6="Second";
cout << s5+s6 << endl;
cout << s6+"Third" << endl;
cout << "Zero"+s5 << endl;
cout << "s1Àº "+s1+"À̰í s5´Â "+s5+"ÀÌ´Ù." << endl;
s5+=s6;
cout << "s5¿Í s6À» ¿¬°áÇϸé " << s5 << "ÀÌ´Ù." << endl;
s5+="Concatination";
cout << "s5¿¡ ¹®ÀÚ¿À» µ¡ºÙÀ̸é " << s5 << "ÀÌ´Ù." << endl;
// ºñ±³ ¿¬»êÀÚ Å×½ºÆ®
if (s1 == s2) {
cout << "µÎ ¹®ÀÚ¿Àº °°´Ù." << endl;
} else {
cout << "µÎ ¹®ÀÚ¿Àº ´Ù¸£´Ù." << endl;
}
// char *Çü°úÀÇ ¿¬»ê Å×½ºÆ®
Str s7;
s7="»ó¼ö ¹®ÀÚ¿";
cout << s7 << endl;
char str[128];
strcpy(str,s7);
cout << str << endl;
// ÷ÀÚ ¿¬»êÀÚ Å×½ºÆ®
Str s8("Index");
cout << "s8[2]=" << s8[2] << endl;
s8[2]='k';
cout << "s8[2]=" << s8[2] << endl;
// ¼½Ä Á¶¸³ Å×½ºÆ®
Str sf;
int i=9876;
double d=1.234567;
sf.Format("¼½Ä Á¶¸³ °¡´ÉÇÏ´Ù. Á¤¼ö=%d, ½Ç¼ö=%.2f",i,d);
cout << sf << endl;
}
½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù. ³ª¸§´ë·Î ±â´ÉÀÌ ¸¹±â ¶§¹®¿¡ ÀÌ°Í Àú°Í Å×½ºÆ®ÇØ º¼ °Ô ¸¹Àº ÆíÀε¥ ¸ðµÎ Á¤È®ÇÏ°Ô Àß µ¿ÀÛÇÑ´Ù.
s1=¹®ÀÚ¿,s2=¹®ÀÚ¿,s3=¹®ÀÚ¿
±æÀÌ=¹®ÀÚ¿
s4=1234
num=1235
FirstSecond
SecondThird
ZeroFirst
s1Àº ¹®ÀÚ¿À̰í s5´Â FirstÀÌ´Ù.
s5¿Í s6À» ¿¬°áÇϸé FirstSecondÀÌ´Ù.
s5¿¡ ¹®ÀÚ¿À» µ¡ºÙÀ̸é FirstSecondConcatinationÀÌ´Ù.
µÎ ¹®ÀÚ¿Àº °°´Ù.
»ó¼ö ¹®ÀÚ¿
»ó¼ö ¹®ÀÚ¿
s8[2]=d
s8[2]=k
¼½Ä Á¶¸³ °¡´ÉÇÏ´Ù. Á¤¼ö=9876, ½Ç¼ö=1.23
main ÇÔ¼öÀÇ ÁÖ¼®¿¡ ÀûÈù´ë·Î Str Ŭ·¡½º°¡ °¡Áø(¾ó¸¶ µÇÁø ¾ÊÁö¸¸) ¸ðµç ±â´ÉÀ» ¼ø¼´ë·Î ºÒ·¯ º¸°í Á¦´ë·Î µ¿ÀÛÇÏ´ÂÁö Å×½ºÆ®ÇØ º¸¾Ò´Ù.