36-2-¹Ù.ºñ±³¿Í °Ë»ö

µÎ ¹®ÀÚ¿­ °´Ã¼ÀÇ »óµî, ´ë¼Ò¸¦ ºñ±³ÇÒ ¶§´Â ±âº» ŸÀÔ°ú ¸¶Âù°¡Áö·Î °ü°è ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù. ¹®ÀÚ¿­À» ºñ±³ÇÒ ¶§´Â _Traits °´Ã¼°¡ ÁöÁ¤ÇÑ ±ÔÄ¢¿¡ µû¶ó ¹®ÀÚ ÄÚµåÀÇ ¼ø¼­¿¡ µû¶ó ºñ±³Çϴµ¥ string Ŭ·¡½º¿¡ Àû¿ëµÈ µðÆúÆ® _Traits°¡ ASCII Äڵ带 ±âÁØÀ¸·Î ÇϹǷΠAº¸´Ù B°¡ Å©°í Bº¸´Ù C°¡ ´õ Å©´Ù. °ü°è ¿¬»êÀÚ ¿Ü¿¡ compare¶ó´Â ¸â¹ö ÇÔ¼ö·Î ºñ±³ÇÒ ¼öµµ Àִµ¥ compare´Â ¿¬»êÀÚ¿¡ ºñÇØ ¹®ÀÚ¿­ÀÇ ÀϺθ¸À» ºñ±³ÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ¿¬»êÀÚ´Â Ç×»ó Àüü¸¦ ´ë»óÀ¸·Î Çϸç ÇÔ¼ö´Â ÀϺο¡ ´ëÇØ¼­µµ µ¿ÀÛÇÏ´Â ½ÄÀÌ´Ù.

°ü°è ¿¬»êÀÚ¿Í compare ÇÔ¼ö ¸ðµÎ ´Ù¾çÇÑ Å¸ÀÔ¿¡ ´ëÇØ ¿À¹ö·ÎµùµÇ¾î ÀÖÀ¸¹Ç·Î string °´Ã¼³¢¸® ºñ±³ÇÒ ¼öµµ ÀÖ°í string °´Ã¼¿Í ¹®ÀÚ¿­ »ó¼ö¸¦ ºñ±³ÇÒ ¼öµµ ÀÖ´Ù. ¿¬»êÀÚÀÇ °æ¿ì Á¿캯ÀÇ ¼ø¼­´Â Áß¿äÇÏÁö ¾ÊÀ¸¹Ç·Î ¼ø¼­¿¡ »ó°ü¾øÀÌ ºñ±³ °¡´ÉÇÏ´Ù. Áï if (s == "mo")·Î ºñ±³Çϳª if ("mo" == s)·Î ºñ±³Çϳª ¶È°°´Ù´Â ¾ê±â´Ù. ´ÙÀ½Àº string °´Ã¼³¢¸® ºñ±³ÇÏ´Â compare ÇÔ¼öÀ̸ç ÀÌ ¿Ü¿¡ const char *¸¦ Àμö·Î ÃëÇØ ¹®ÀÚ¿­ »ó¼ö¿Í ºñ±³ÇÏ´Â compare ÇÔ¼öµµ Á¤ÀǵǾî ÀÖ´Ù.

 

int compare(const string& str) const;

int compare(size_t pos, size_t num, const string& str) const;

int compare(size_t pos, size_t num, const string& str, size_t off, size_t count) const;

 

ù ¹øÂ° ¿øÇüÀº µÎ ¹®ÀÚ¿­ °´Ã¼ Àüü¸¦ ºñ±³ÇÏ¸ç µÎ ¹øÂ° ¿øÇüÀº È£Ãâ °´Ã¼ÀÇ ÀϺθ¦ str Àüü¿Í ºñ±³ÇÏ¸ç ¼¼ ¹øÂ° ¿øÇüÀº È£Ãâ °´Ã¼ ÀÏºÎ¿Í strÀÇ ÀϺθ¦ ºñ±³ÇÑ´Ù. ºñ±³ÇÑ °á°ú´Â Á¤¼ö·Î ¸®ÅϵǴµ¥ µÎ ¹®ÀÚ¿­ÀÌ ¿ÏÀüÈ÷ ÀÏÄ¡Çϸé 0À» ¸®ÅÏÇϸç È£ÃâÇÑ °´Ã¼°¡ ´õ ÀÛÀ¸¸é À½¼ö¸¦ ¸®ÅÏÇϰí È£ÃâÇÑ °´Ã¼°¡ ´õ Å©¸é ¾ç¼ö¸¦ ¸®ÅÏÇÑ´Ù. Ç¥ÁØ strcmp ÇÔ¼öÀÇ ¸®Åϰª°ú Àǹ̰¡ °°À¸¹Ç·Î ¿Ü¿ì±âµµ ½±´Ù. ´ÙÀ½Àº °ü°è ¿¬»êÀÚ¿Í compare ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¹®ÀÚ¿­³¢¸® ºñ±³ÇÏ´Â ¿¹Á¦ÀÌ´Ù.

 

¿¹ Á¦ : compare

#include <iostream>

#include <string>

using namespace std;

 

void main()

{

     string s1("aaa");

     string s2("bbb");

 

     cout << (s1 == s1 ? "°°´Ù":"´Ù¸£´Ù") << endl;

     cout << (s1 == s2 ? "°°´Ù":"´Ù¸£´Ù") << endl;

     cout << (s1 > s2 ? "Å©´Ù":"¾ÈÅ©´Ù") << endl;

 

     string s3("1234567");

     string s4("1234999");

     cout << (s3.compare(s4)==0 ? "°°´Ù":"´Ù¸£´Ù") << endl;

     cout << (s3.compare(0,4,s4,0,4)==0 ? "°°´Ù":"´Ù¸£´Ù") << endl;

 

     string s5("hongkildong");

     cout << (s5 == "hongkildong" ? "°°´Ù":"´Ù¸£´Ù") << endl;

}

 

¿©·¯ °¡Áö ¹®ÀÚ¿­ °´Ã¼µéÀ» ºñ±³ÇØ ºÃ´Âµ¥ »ó¼ö³ª ¸¶Âù°¡ÁöÀÎ ¹®ÀÚ¿­À» ºñ±³ÇßÀ¸¹Ç·Î °á°ú´Â »·ÇÏ´Ù.

 

°°´Ù

´Ù¸£´Ù

¾ÈÅ©´Ù

´Ù¸£´Ù

°°´Ù

°°´Ù

 

s1³¢¸®´Â ´ç¿¬È÷ °°°í s1°ú s2´Â ´Ù¸£¸ç ´ë¼Ò¸¦ ºñ±³Çϸé 'b'ÀÇ ¹®ÀÚ Äڵ尡 'a'º¸´Ù ´õ Å©¹Ç·Î s2°¡ ´õ Å©´Ù. ¸¶Ä¡ Á¤¼ö³ª ½Ç¼ö¸¦ ºñ±³ÇÏ´Â °Íó·³ ¹®ÀÚ¿­ °´Ã¼ÀÇ »óµî, ´ë¼Ò ºñ±³¸¦ ÇÒ ¼ö ÀÖ¾î Äڵ尡 ¾ÆÁÖ »ó½ÄÀûÀÌ´Ù. s3, s4¸¦ compare ÇÔ¼ö·Î ºñ±³ÇÒ ¶§ Àüü¸¦ ´Ù ºñ±³ÇÏ¸é ´Ù¸¥ °ÍÀ¸·Î ÆÇ´ÜÇÏÁö¸¸ ¾Õ ºÎºÐÀÇ 4±ÛÀÚ¸¸ ºñ±³ÇÏ¸é °°´Ù´Â °á°ú°¡ ³ª¿Â´Ù. ÀÌó·³ ¹®ÀÚ¿­ÀÇ ÀϺκи¸ ºñ±³ÇÏ°í ½ÍÀ» ¶§´Â °ü°è ¿¬»êÀÚ ´ë½Å compare ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

¹®ÀÚ¿­ °´Ã¼³¢¸®»Ó¸¸ ¾Æ´Ï¶ó ¹®ÀÚ¿­ »ó¼ö¿Íµµ ºñ±³ÇÒ ¼ö ÀÖ´Ù. s5ÀÇ ¹®ÀÚ¿­ÀÌ Æ¯Á¤ ¹®ÀÚ¿­ÀÎÁö ¾Ë°í ½ÍÀ» ¶§ ¿¹Á¦¿¡¼­¿Í °°ÀÌ ºñ±³ÇÏ°í ½ÍÀº ¹®ÀÚ¿­ »ó¼ö¸¦ ¹Ù·Î ¿ìº¯¿¡ ½áµµ »ó°ü¾ø´Ù. »Ó¸¸ ¾Æ´Ï¶ó "hongkildong" == s5ó·³ ¹®ÀÚ¿­ »ó¼ö¸¦ Áº¯¿¡ ¾²°í string °´Ã¼¸¦ ¿ìº¯¿¡ ½áµµ Àß µ¿ÀÛÇϴµ¥ ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â == ¿¬»êÀÚ°¡ string Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö·Î Á¤ÀǵǾî ÀÖÁö ¾Ê°í Àü¿ª ¿¬»êÀÚ ÇÔ¼ö·Î Á¤ÀǵǾî ÀÖÀ¸¸ç (string &, const char *)¿Í (const char *, string &) ¹öÀüÀÌ Áߺ¹µÇ¾î Àֱ⠶§¹®ÀÌ´Ù.

´ÙÀ½Àº string °´Ã¼¿¡¼­ ºÎºÐ ¹®ÀÚ¿­À̳ª ƯÁ¤ ¹®ÀÚ°¡ ¾îµð¿¡ ÀÖ´ÂÁö¸¦ ã´Â °Ë»ö ÇÔ¼ö¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ¿©·¯ °¡Áö ´Ù¾çÇÑ °Ë»ö ÇÔ¼ö°¡ ÁغñµÇ¾î Àִµ¥ °¡Àå ±âº»ÀûÀÎ °Ë»ö ÇÔ¼ö´Â findÀÌ´Ù. find¸¸ ÇØµµ ´Ù¾çÇÑ Å¸ÀÔ¿¡ ´ëÇØ ¿À¹ö·ÎµùµÇ¾î ÀÖ´Ù.

 

size_t find(char ch, size_t off=0) const;

size_t find(const char* ptr, size_t off=0) const;

size_t find(const char* ptr, size_t off=0, size_t count) const;

size_t find(const string& str, size_t off=0) const;

 

string °´Ã¼ÀÇ offÀ§Ä¡¿¡¼­ ¹®ÀÚ, ¹®ÀÚ¿­, ´Ù¸¥ string °´Ã¼¸¦ ã¾Æ ±× ÷ÀÚ À§Ä¡¸¦ ¸®ÅÏÇÑ´Ù. ¹ß°ßµÇÁö ¾ÊÀ» °æ¿ì -1·Î Á¤ÀǵǾî ÀÖ´Â string::npos¸¦ ¸®ÅÏÇϹǷΠÀÌ °ª°ú »óµî ¿¬»êÇØ º¸¸é °Ë»ö ´ë»óÀÇ Á¸Àç ¿©ºÎ¸¦ ¾Ë ¼ö ÀÖ´Ù.

 

¿¹ Á¦ : stringfind

#include <iostream>

#include <string>

using namespace std;

 

void main()

{

     string s1("string class find function");

     string s2("func");

 

     cout << "i:" << s1.find('i') << "¹øÂ°" << endl;

     cout << "i:" << s1.find('i',10) << "¹øÂ°" << endl;

     cout << "ass:" << s1.find("ass") << "¹øÂ°" << endl;

     cout << "findingÀÇ ¾Õ 4:" << s1.find("finding",0,4) << "¹øÂ°" << endl;

     cout << "kiss:" << s1.find("kiss") << "¹øÂ°" << endl;

     cout << s2 << ':' << s1.find(s2) << "¹øÂ°" << endl;

}

 

Å×½ºÆ® ¹®ÀÚ¿­À» Çϳª ¼±¾ðÇϰí ÀÌ ¹®ÀÚ¿­¿¡ ¹®ÀÚ¿Í ºÎºÐ ¹®ÀÚ¿­ÀÇ À§Ä¡¸¦ °Ë»öÇØ º¸¾Ò´Ù.

 

i:3¹øÂ°

i:14¹øÂ°

ass:9¹øÂ°

findingÀÇ ¾Õ 4:13¹øÂ°

kiss:4294967295¹øÂ°

func:18¹øÂ°

 

i¹®ÀÚ¸¦ ¹®ÀÚ¿­ÀÇ Ã³À½ºÎÅÍ °Ë»öÇϸé "string" ´Ü¾îÀÇ 3¹øÂ° À§Ä¡¿¡¼­ °Ë»öµÈ´Ù. ´ÜÀÏ ¹®ÀÚ¸¦ °Ë»öÇÒ ¶§´Â µÎ ¹øÂ° Àμö off·Î °Ë»ö ½ÃÀÛ À§Ä¡¸¦ ÁöÁ¤ÇÒ ¼ö Àִµ¥ 10¹øÂ°¿¡¼­ºÎÅÍ °Ë»öÇϸé "find" ´Ü¾îÀÇ 2¹øÂ° À§Ä¡¿¡¼­ °Ë»öµÇ´Âµ¥ ÀÌ À§Ä¡´Â Àüü ¹®ÀÚ¿­ÀÇ 14¹øÂ° À§Ä¡¿¡ ÇØ´çµÈ´Ù. °Ë»öÀ» ½ÃÀÛÇÒ À§Ä¡¿¡ µû¶ó °á°ú À§Ä¡°¡ ´Þ¶óÁö´Âµ¥ ÀÌ·± ½ÄÀ¸·Î °Ë»öÀ» ¹Ýº¹Çϸé ÇØ´ç ¹®ÀÚ°¡ ÀÖ´Â ¸ðµç À§Ä¡¸¦ ¾Ë ¼ö ÀÖ´Ù.

ºÎºÐ ¹®ÀÚ¿­µµ °Ë»öÇÒ ¼ö Àִµ¥ "ass"¶ó´Â ¹®ÀÚ¿­Àº "class" ´Ü¾îÀÇ µÚÂÊ¿¡ ¹ß°ßµÈ´Ù. ºÎºÐ ¹®ÀÚ¿­ÀÇ ÀϺεµ °Ë»öÇÒ ¼ö Àִµ¥ "finding"À̶ó´Â ´Ü¾î´Â ¾øÁö¸¸ ÀÌ ´Ü¾îÀÇ ¾ÕÂÊ 4±ÛÀÚ¸¸ °Ë»öÇÏ¸é °Ë»öµÈ´Ù. ÁöÁ¤ÇÑ ´Ü¾î°¡ ¹ß°ßµÇÁö ¾ÊÀ» °æ¿ì string::npos°¡ ¸®ÅϵǴµ¥ ÀÌ °ªÀÌ ¸®ÅϵǾú´Ù´Â °ÍÀº ÇØ´ç ¹®ÀÚ¿­ÀÌ ¾ø´Ù´Â ¶æÀÌ´Ù. string °´Ã¼¸¦ °Ë»öÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù.

find´Â °¡Àå ±âº»ÀûÀÎ °Ë»ö ÇÔ¼öÀ̸ç À̿ܿ¡ °Ë»ö ¹æÇâ°ú Æ÷ÇÔ ¹®ÀÚ °Ë»ö, ºñÆ÷ÇÔ ¹®ÀÚ °Ë»ö µîÀÇ ´Ù¾çÇÑ ÇÔ¼öµéÀÌ ´Ù¾çÇÑ ¿øÇüÀ¸·Î Á¦°øµÈ´Ù. ÇÔ¼öµéÀÇ ¼ö°¡ ¸¹À¸¹Ç·Î ¿øÇüÀº µû·Î Á¦½ÃÇÏÁö ¾Ê°í ¿¹Á¦¸¸À¸·Î ÇÔ¼ö¸¦ ¼Ò°³Çϱâ·Î ÇÑ´Ù.

 

¿¹ Á¦ : stringfind2

#include <iostream>

#include <string>

using namespace std;

 

void main()

{

     string s1("starcraft");

     string s2("123abc456");

     string moum("aeiou");

     string num("0123456789");

 

     cout << "¼ø¹æÇâ t:" << s1.find('t') << "¹øÂ°" << endl;

     cout << "¿ª¹æÇâ t:" << s1.rfind('t') << "¹øÂ°" << endl;

     cout << "¿ª¹æÇâ cra:" << s1.rfind("cra") << "¹øÂ°" << endl;

     cout << "ÃÖÃÊÀÇ ¸ðÀ½" << s1.find_first_of(moum) << "¹øÂ°" << endl;

     cout << "ÃÖÈÄÀÇ ¸ðÀ½" << s1.find_last_of(moum) << "¹øÂ°" << endl;

     cout << "ÃÖÃÊÀÇ ºñ¼ýÀÚ" << s2.find_first_not_of(num) << "¹øÂ°" << endl;

     cout << "ÃÖÈÄÀÇ ºñ¼ýÀÚ" << s2.find_last_not_of(num) << "¹øÂ°" << endl;

}

 

string Ŭ·¡½º°¡ Á¦°øÇÏ´Â °Ë»ö ÇÔ¼öµéÀ» ÀüºÎ ÇÑ ¹ø¾¿ È£ÃâÇØ º¸¾Ò´Ù.

 

¼ø¹æÇâ t:1¹øÂ°

¿ª¹æÇâ t:8¹øÂ°

¿ª¹æÇâ cra:4¹øÂ°

ÃÖÃÊÀÇ ¸ðÀ½2¹øÂ°

ÃÖÈÄÀÇ ¸ðÀ½6¹øÂ°

ÃÖÃÊÀÇ ºñ¼ýÀÚ3¹øÂ°

ÃÖÈÄÀÇ ºñ¼ýÀÚ5¹øÂ°

 

rfind´Â ¿ª¹æÇâÀ¸·Î °Ë»öÇÑ´Ù. °°Àº ¹®ÀÚ³ª ºÎºÐ ¹®ÀÚ¿­ÀÌ µÎ ¹ø ÀÌ»ó Æ÷ÇԵǾî ÀÖÀ» °æ¿ì ¼ø¹æÇâÀ¸·Î ãÀ» ¶§¿Í ¿ª¹æÇâÀ¸·Î ãÀ» ¶§ÀÇ °á°ú°¡ ´Ù¸£´Ù. CÇ¥ÁØ ÇÔ¼ö Áß¿¡µµ ¼ø¹æÇâÀ¸·Î ¹®ÀÚ¸¦ °Ë»öÇÏ´Â strchr ÇÔ¼ö¿Í ¿ª¹æÇâÀ¸·Î °Ë»öÇÏ´Â strrchr ÇÔ¼ö°¡ Àִµ¥ find¿Í rfindÀÇ Â÷À̰¡ ¹Ù·Î ÀÌ µÎ ÇÔ¼öÀÇ Â÷ÀÌ¿Í µ¿ÀÏÇÏ´Ù. C Ç¥ÁØ ÇÔ¼ö¿¡´Â ºÎºÐ ¹®ÀÚ¿­À» ¿ª¹æÇâÀ¸·Î °Ë»öÇÏ´Â ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÁö¸¸ string Ŭ·¡½ºÀÇ rfind ÇÔ¼ö´Â ÀÌ·± °Ë»öÀ» ÇÒ ¼ö ÀÖ´Ù.

ÇÔ¼ö¸í¿¡ first, last°¡ µé¾î°¡´Â ÇÔ¼öµéÀº C Ç¥ÁØ ÇÔ¼öÀÇ strpbrk ÇÔ¼ö¿Í À¯»çÇϰųª ¾à°£ º¯ÇüÇÑ °ÍµéÀÌ´Ù. Àμö·Î ÁÖ¾îÁø ¹®ÀÚ¿­À» ±¸¼ºÇÏ´Â ¹®ÀÚ Áß Çϳª¸¦ ¼ø¹æÇâ, ¿ª¹æÇâÀ¸·Î ã°Å³ª ¾Æ´Ï¸é ±¸¼º ¹®ÀÚ°¡ ¾Æ´Ñ ÃÖÃÊÀÇ ¹®ÀÚ¸¦ °Ë»öÇÑ´Ù. ÀÌ ÇÔ¼öµéÀÇ µ¿ÀÛÀ» ¸»·Î ¼³¸íÇÏ´Â °ÍÀº »ó´çÈ÷ ¾î·Á¿îµ¥ strpbrk ÇÔ¼ö¸¦ ¸ÕÀú ÀÌÇØÇϸé ÀÌ ÇÔ¼öµéµµ À¯»çÇÑ ¹æ½ÄÀ¸·Î ÀÌÇØÇÒ ¼ö ÀÖ´Ù. ÃÖÃÊÀÇ ¸ðÀ½À̳ª ¼ýÀÚ ¶Ç´Â ƯÁ¤ ¹®ÀÚ±º¿¡ ¼ÓÇÑ ¹®ÀÚ¸¦ ã°í ½ÍÀ» ¶§ ÀÌ ÇÔ¼öµéÀÌ À¯¿ëÇÏ´Ù.

º¸´Ù½ÃÇÇ string Ŭ·¡½º¿¡´Â º°º° ÈñÇÑÇÑ °Ë»ö ÇÔ¼ö°¡ ´Ù ¸¶·ÃµÇ¾î Àִµ¥ ¿ø·¡ °Ë»öÀ̶õ ¿É¼ÇÀÌ ¸¹Àº µ¿ÀÛÀ̶ó ¸â¹ö ÇÔ¼öµéÀÇ Á¾·ùµµ ¸¹À» ¼ö¹Û¿¡ ¾ø´Ù. ±×·¯³ª ÀÌ·± ´Ù¾çÇÑ ÇÔ¼ö°¡ ÁغñµÇ¾î ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í ´ë¼Ò¹®ÀÚ¸¦ ¹«½ÃÇÏ°í °Ë»öÇÏ´Â ÇÔ¼ö°¡ ¾ø¾î¼­ ¾Æ½±´Ù. ÇÔ¼ö¶õ ¾Æ¹«¸® ¸¹¾Æµµ Ư¼öÇÑ ÀÀ¿ë¿¡ µÎ·ç »ç¿ëÇϱ⿡´Â ¿ª½Ã ºÎÁ·Çѵ¥ ÀÌ·± ÇÔ¼öµéÀÌ ÇÊ¿äÇÏ´Ù¸é °³¹ßÀÚ°¡ Àç·®²¯ ·¡ÆÛ ÇÔ¼ö¸¦ ¸¸µé¾î »ç¿ëÇÏ´Â ¼ö¹Û¿¡ ¾ø´Ù.