12.1 string Ãß»ó(abstraction) stringÀº À妽ÌÀÌ °¡´ÉÇÑ ¹®ÀÚµéÀÇ ½ÃÄö½ºÀÌ´Ù. ºñ·Ï, stringÀÌ vectorÀÇ ¼­ºêŬ·¡½º´Â ¾Æ´ÏÁö¸¸, 5Àå¿¡¼­ ¼³¸íÇÑ ´ëºÎºÐÀÇ vector ¿¬»êµéÀ» string¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Ù. °Ô´Ù°¡, stringÀº vector ¿¬»ê»Ó¸¸ ¾Æ´Ï¶ó À¯¿ëÇÏ°í °­·ÂÇÑ °í¼öÁØ ¿¬»êµéÀ» Ãß°¡·Î Á¦°øÇÑ´Ù. Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ stringÀº ½ÇÁ¦·Î´Â basic_string ÅÛÇø´ Ŭ·¡½ºÀÌ´Ù. ÅÛÇø´ ÀÎÀÚ´Â string ÄÁÅ×À̳ʸ¦ ±¸¼ºÇÏ´Â ¹®ÀÚÀÇ Å¸ÀÔÀ» ³ªÅ¸³½´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á, Ç¥ÁØ ¶óÀ̺귯¸®´Â ÀϹÝÀûÀ¸·Î ¸¹ÀÌ ¾²ÀÌ´Â 8ºñÆ® ¾Æ½ºÅ° ¹®ÀÚµé»Ó¸¸ ¾Æ´Ï¶ó 16ºñÆ® ±¤Æø ¹®ÀÚ(wide character)µé°ú °°Àº °Íµéµµ ´Ù·ê ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. string°ú wstring(±¤Æø string) µ¥ÀÌÅÍ Å¸ÀÔÀº ´ÙÀ½°ú °°ÀÌ typedef¸¦ °ÅÄ£ basic_stringµéÀÌ´Ù. typedef basic_string string; typedef basic_string wstring; [Image]string°ú wstring ¹æ±Ý ¸»ÇßµíÀÌ, stringÀº ¿©·¯¸é¿¡¼­ ¹®ÀÚ vector¿Í ºñ½ÁÇÏ´Ù. vector µ¥ÀÌÅÍ Å¸ÀÔ¿¡¼­Ã³·³, string¿¡µµ µÎ°¡Áö Á¾·ùÀÇ »çÀÌÁî°¡ ÀÖ´Ù. Çϳª´Â stringÀÌ ½ÇÁ¦·Î ´ã°í ÀÖ´Â ¹®ÀÚµéÀÇ °¹¼ö¸¦ ³ªÅ¸³½´Ù. ´Ù¸¥ Çϳª´Â ¹öÆÛ¸¦ »õ·Î ÇÒ´çÇÏÁö ¾Ê°í string¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Â ¹®ÀÚÀÇ ÃÖ´ë°¹¼ö¸¦ ³ªÅ¸³»¸ç, capacity¶ó°í ĪÇÑ´Ù. vector µ¥ÀÌÅÍ Å¸ÀÔ¿¡¼­Ã³·³, stringÀÇ capacityµµ µ¿ÀûÀ¸·Î º¯ÇÏ´Â ¾çÀÌ´Ù. string ¿¬»êÀ» ¼öÇàÇÏ´Â µµÁß¿¡ string¿¡ ÀúÀåµÈ ¹®ÀÚÀÇ °¹¼ö°¡ stringÀÇ capacity¸¦ ÃÊ°úÇÏ°Ô µÇ¸é, ³»ºÎÀûÀ¸·Î ¹öÆÛ¸¦ »õ·Î ÇÒ´çÇÏ¿© stringÀÇ capacity¸¦ Áõ°¡½ÃŲ´Ù. À̶§ ¸ðµç °úÁ¤µéÀº °ÑÀ¸·Î µå·¯³ªÁö ¾ÊÀ¸¸ç, ÇÁ·Î±×·¡¸Ó°¡ °ü¿©ÇÒ ÇÊ¿äµµ ¾ø´Ù. 12.1.1 Include È­ÀÏ stringÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥µéÀº string Çì´õ È­ÀÏÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù. #include 12.2 string ¿¬»ê ÀÌ Àý¿¡¼­´Â stringÀ» »ý¼ºÇϰųª Á¶ÀÛÇϴµ¥ »ç¿ëµÇ´Â Ç¥ÁØ ¶óÀ̺귯¸® ¿¬»êµéÀ» »ìÆ캻´Ù. 12.2.1 stringÀÇ ¼±¾ð°ú ÃʱâÈ­ stringÀ» ¼±¾ðÇÏ´Â °¡Àå °£´ÜÇÑ ÇüÅ´ ´Ü¼øÈ÷ º¯¼ö À̸§¸¸À» ÁöÁ¤Çϰųª, stringÀÇ ÃʱⰪÀ» °°ÀÌ Á¦°øÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ÀÌ ÇüÅ´ 9.3.2Àý¿¡ ÁÖ¾îÁø ±×·¡ÇÁ ¿¹Á¦¿¡¼­ °¡Àå ¸¹ÀÌ »ç¿ëÇÑ ¹æ¹ýÀÌ´Ù. º¹»ç »ý¼ºÀÚ´Â ´Ù¸¥ string °ªÀ» ÃʱⰪÀ¸·Î »ç¿ëÇÑ´Ù. string s1; // º¯¼ö À̸§¸¸ ÁöÁ¤ string s2("a string"); // ÃʱⰪ Á¦°ø string s3 = "initial value"; // ÃʱⰪ Á¦°ø string s4(s3); // º¹»ç »ý¼ºÀÚ ÀÌ¿ë ÀÌ·¯ÇÑ °æ¿ì¿¡´Â capacity´Â óÀ½¿¡´Â ÀúÀåµÈ ¹®ÀÚÀÇ °¹¼ö¿Í Á¤È®È÷ °°´Ù. ¸í½ÃÀûÀ¸·Î Ãʱâ capacity¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â »ý¼ºÀÚ°¡ ÀÖÀ¸¸ç, ¶ÇÇÑ capacity¸¦ ¼¼ÆÃÇÏ°í °°Àº ¹®ÀÚ¸¦ ¿©·¯°³ Æ÷ÇÔÇÑ stringÀ» ÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù. string s6("small value", 100); // 11°³ÀÇ ¹®ÀÚ¸¦ Æ÷ÇÔ, 100°³±îÁö ´ãÀ» ¼ö ÀÖÀ½ string s7(10, '\n'); // 10°³ÀÇ °³Ç๮ÀÚ·Î ÃʱâÈ­ [Image] ¹Ýº¹ÀÚ¸¦ ÀÌ¿ëÇÑ ÃʱâÈ­ ¸¶Áö¸·À¸·Î, ´Ù¸¥ ÄÁÅ×ÀÌ³Ê Å¬·¡½º¿¡¼­Ã³·³ stringµµ ÇѽÖÀÇ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÏ¿© ÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù. ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â ½ÃÄö½º´Â ÀûÀýÇÑ Å¸ÀÔÀÇ ¿ø¼ÒµéÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. string s8(aList.begin(), aList.end()); 12.2.2 »çÀÌÁî(size)¿Í ¿ë·®(capacity) °íÄ¡±â vector µ¥ÀÌÅÍ Å¸ÀÔ°ú ¸¶Âù°¡Áö·Î, stringÀÇ ÇöÀç »çÀÌÁî´Â size() ¸â¹ö ÇÔ¼ö¸¦ ÅëÇØ ¾Ë¾Æº¼ ¼ö ÀÖ°í, ÇöÀç capacity´Â capacity()¸¦ »ç¿ëÇÑ´Ù. capacity´Â reserve() ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© º¯°æÇÒ ¼ö ÀÖ°í, ÇÊ¿äÇÏ¸é ¿ëÀûÀ» Á¶ÀýÇÏ¿© stringÀÌ ÀÎÀÚ·Î ¸í½ÃÇÑ ¸¸Å­ÀÇ ¹®ÀÚ¸¦ ´ãµµ·Ï ÇÒ ¼ö ÀÖ´Ù. max_size() ¸â¹ö ÇÔ¼ö´Â ÇÒ´çÇÒ ¼ö ÀÖ´Â °¡Àå Å« string »çÀÌÁ ¹ÝȯÇÑ´Ù. ´ë°³ ÀÌ°ªÀº »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸® ¾ç¿¡ ÀÇÇØ Á¦ÇѵȴÙ. cout << s6.size() << endl; cout << s6.capacity() << endl; s6.reserve(200); // capacity¸¦ 200À¸·Î ¹Ù²Û´Ù cout << s6.capacity() << endl; cout << s6.max_size() << endl; length() ¸â¹öÇÔ¼ö´Â size() ¸â¹öÇÔ¼ö¿Í µ¿ÀÏÇÏ´Ù. resize() ¸â¹ö ÇÔ¼ö´Â stringÀÇ »çÀÌÁ º¯°æÇÒ ¼ö ÀÖ°í, ÀÌ °úÁ¤¿¡¼­ stringÀÇ ³¡ºÎºÐÀÌ À߸± ¼öµµ ÀÖ°í, »õ·Î ¹®ÀÚµéÀÌ Ã·°¡µÉ ¼öµµ ÀÖ´Ù. resize()ÀÇ µÎ¹ø° ÀÎÀÚ´Â »õ·Î Ãß°¡µÇ´Â ¹®ÀÚ¸¦ ¸í½ÃÇÒ ¼ö ÀÖÀ¸¸ç, »ý·«µµ °¡´ÉÇÏ´Ù. s7.resize(15, '\t'); // ¸Ç ³¡¿¡ ÅÇ ¹®ÀÚµéÀ» Ãß°¡ÇÏ¿© »çÀÌÁ ´Ã¸°´Ù cout << s7.length() << endl; // »çÀÌÁî´Â ÀÌÁ¦ 15 empty() ¸â¹ö ÇÔ¼ö´Â string¿¡ ¹®ÀÚ°¡ ¾øÀ» ¶§ ÂüÀÌ µÇ¸ç, size()¸¦ 0À̶û ºñ±³ÇÏ´Â °Íº¸´Ù ÀϹÝÀûÀ¸·Î ºü¸£´Ù. if (s7.empty()) cout << "string is empty" << endl; 12.2.3 ´ëÀÔ(assign), µ¡ºÙÀ̱â(append), ±³È¯(swap) string º¯¼ö¿¡ ´Ù¸¥ stringÀ» ´ëÀÔÇÒ ¼ö°¡ ÀÖ°í, C ½ºÅ¸ÀÏÀÇ ¹®ÀÚ ¹è¿­À̳ª °³º° ¹®ÀÚµµ ´ëÀÔÀÌ °¡´ÉÇÏ´Ù. s1 = s2; s2 = "a new value"; s3 = 'x'; += ¿¬»êÀÚµµ ÀÌµé ¼¼°¡Áö ÇüÅÂÀÇ ÀÎÀÚµé°ú ÇÔ²² »ç¿ëÀÌ °¡´ÉÇϸç, ¿ìº¯°ªÀÌ Áº¯ÀÇ ³¡¿¡ µ¡ºÙÀδÙ. s3 += "yz"; // s3´Â ÀÌÁ¦ "xyz" ´õ ÀϹÝÀûÀÎ ÇüÅÂÀÇ ÇÔ¼ö·Î assign()°ú append() ¸â¹ö ÇÔ¼ö°¡ ÀÖ´Ù. À̵éÀº ù¹ø° ÀÎÀÚ·Î ÁÖ¾îÁø stringÀÇ ÀϺκи¸ appendµÇµµ·Ï Çϴµ¥, µÎ¹ø° ÀÎÀÚ·Î ¸í½ÃµÈ À§Ä¡¿¡¼­ ¼¼¹ø° ÀÎÀÚ·Î ÁÖ¾îÁø °¹¼ö¸¸Å­À» appendÇÑ´Ù. s4.assign(s2, 0, 3); // s2ÀÇ Ã³À½ 3 ¹®ÀÚ¸¦ s4¿¡ ´ëÀÔÇÑ´Ù s4.append(s5, 2, 3); // 2, 3, 4¹ø À§Ä¡¿¡ ÀÖ´Â ¹®ÀÚµéÀ» µ¡ºÙÀδ٠µ¡¼À ¿¬»êÀÚ +´Â µÎ°³ÀÇ stringÀ» ¿¬°áÇÒ ¶§ »ç¿ëÇÑ´Ù. + ¿¬»êÀÚ´Â ¿ÞÂÊ ÀÎÀÚÀÇ º¹»çº»À» ¸¸µé°í, ÀÌ º¹»çº»¿¡ ¿À¸¥ÂÊ ÀÎÀÚ¸¦ µ¡ºÙÀδÙ. cout << (s2 + s3) << endl; // s2¿Í s3À» µ¡ºÙÀÎ °ÍÀ» Ãâ·Â Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ ¸ðµç ÄÁÅ×À̳ʵé°ú ¸¶Âù°¡Áö·Î, µÎ stringÀÇ ³»¿ëÀº swap()À» »ç¿ëÇÏ¿© ¼­·Î ¹Ù²Ü ¼ö ÀÖ´Ù. s5.swap(s4); // s4¿Í s5¸¦ ¹Ù²Û´Ù 12.2.4 ¹®ÀÚ Á¢±Ù string¿¡ ´ã±ä °³º°ÀûÀÎ ¹®ÀÚµéÀº ÷ÀÚ ¿¬»êÀ» »ç¿ëÇÏ¿© Á¢±ÙÇϰųª ´ëÀÔÇÑ´Ù. at() ¸â¹öÇÔ¼ö´Â ÀÎÀÚ·Î ÁÖ¾îÁø °ªÀÌ size()º¸´Ù Å©°Å³ª °°À¸¸é out_of_range ¿¹¿Ü(exception)°¡ throwµÈ´Ù´Â °ÍÀ» Á¦¿ÜÇÏ°ï ÷ÀÚ¿¬»ê°ú µ¿ÀÏÇÏ´Ù. cout << s4[2] << endl; // s4ÀÇ 2¹ø À§Ä¡ÀÇ ¹®ÀÚ¸¦ Ãâ·Â s4[2] = 'x'; // 2¹ø À§Ä¡ÀÇ ¹®ÀÚ¸¦ º¯°æ cout << s4.at(2) << endl; // º¯°æµÈ °ªÀ» Ãâ·Â c_str() ¸â¹ö ÇÔ¼ö´Â ³Î¹®ÀÚ·Î ³¡³ª´Â ¹®ÀÚ ¹è¿­À» ¸®ÅÏÇÏ°í, ÀÌ ¹è¿­¿¡ ´ã±ä ¹®ÀÚµéÀº string¿¡ ´ã±ä ¹®ÀÚµé°ú µ¿ÀÏÇÏ´Ù. ÀÌ´Â ¿¹ÀüÀÇ C ½ºÅ¸ÀÏÀÇ ¹®Àڹ迭À» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ÇÊ¿ä·ÎÇÏ´Â ÇÔ¼ö¿Í ÇÔ²² stringÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. °Ô´Ù°¡, c_str()°¡ ¸®ÅÏÇÏ´Â °ªÀº, ÀçÇÒ´çÀÌ ÀϾ ¼ö ÀÖ´Â ¿¬»ê(append()³ª insert())À» ¼öÇàÇÑ µÚ¿¡, À¯È¿ÇÏÁö ¾ÊÀ» ¼ö°¡ ÀÖ´Ù. data() ¸â¹ö ÇÔ¼ö´Â stringÀ» ±¸¼ºÇÏ´Â ¹®ÀÚ ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù. char d[256]; strcpy(d, s4.c_str()); // s4¸¦ ¹è¿­ d¿¡ º¹»ç 12.2.5 ¹Ýº¹ÀÚ begin()°ú end() ¸â¹ö ÇÔ¼ö´Â stringÀÇ Ã³À½°ú ³¡À» °¡¸®Å°´Â ÀÓÀÇÁ¢±Ù ¹Ýº¹ÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â °ªµéÀº °¢°¢ÀÇ ¹®ÀÚµéÀÌ´Ù. rbegin()°ú rend()´Â ¿ª¹æÇ⠹ݺ¹ÀÚ(?)¸¦ ¸®ÅÏÇÑ´Ù. [Image] ¹Ýº¹ÀÚÀÇ ¹«È¿È­ 12.2.6 »ðÀÔ, »èÁ¦, ġȯ(replacement) stringÀÇ ¸â¹ö ÇÔ¼öÀÎ insert()¿Í erase()´Â vector ÇÔ¼ö insert()¿Í erase()¿Í ºñ½ÁÇÏ´Ù. vector¿Í °°ÀÌ ¹Ýº¹ÀÚµéÀ» ÀÎÀÚ·Î ³Ñ°ÜÁÖ°í, À̵é ÀÎÀÚ°¡ °¡¸®Å°´Â ±¸°£À» »ðÀÔÇÏ°í »èÁ¦ÇÑ´Ù. replace() ÇÔ¼ö´Â erase()¿Í insert()¸¦ ÇÕÃÄ ³õÀº °Í°ú °°À¸¸ç, ƯÁ¤ ±¸°£À» »õ·Î¿î °ªÀ¸·Î ġȯÇÑ´Ù. s2.insert(s2.begin()+2, aList.begin(), aList.end()); s2.erase(s2.begin()+3, s2.begin()+5); s2.replace(s2.begin()+3, s2.begin()+6, s3.begin(), s3.end()); Ãß°¡·Î, ¹Ýº¹ÀÚ·Î ±¸ÇöÇÏÁö ¾ÊÀº ÇÔ¼öµéµµ Àִµ¥, insert ¸â¹ö ÇÔ¼ö´Â À§Ä¡¿Í stringÀ» ÀÎÀÚ·Î ÃëÇÏ¿©, stringÀ» ÁÖ¾îÁø À§Ä¡¿¡ »ðÀÔÇÑ´Ù. erase() ÇÔ¼ö´Â µÎ°³ÀÇ Á¤¼ö ÀÎÀÚ·Î À§Ä¡¿Í ±æÀ̸¦ ÃëÇÏ°í ¸í½ÃµÈ ¹®ÀÚµéÀ» »èÁ¦ÇÑ´Ù. replace() ÇÔ¼ö´Â string°ú ±æÀÌ(»ý·«°¡´É)¿Í ´õºÒ¾î µÎ°³ÀÇ Á¤¼ö ÀÎÀÚ¸¦ ÃëÇÏ¿©, ¸í½ÃÇÑ ±¸°£À» stringÀ¸·Î ´ëÄ¡ÇÑ´Ù. ¸¸¾à¿¡ ±æÀÌ°¡ ¸í½ÃÀûÀ¸·Î ÁÖ¾îÁö¸é, stringÀÇ ¾ÕÂʺÎÅÍ ÁÖ¾îÁø ±æÀ̸¸Å­¿¡ ÇØ´çÇÏ´Â stringÀ¸·Î ´ëÄ¡ÇÑ´Ù. s3.insert(3, "abc"); // 3¹ø À§Ä¡ µÚ¿¡ "abc" »ðÀÔ s3.erase(4, 2); // 4, 5¹ø À§Ä¡ »èÁ¦ s3.replace(4, 2, "pqr"); // 4, 5¹ø À§Ä¡¸¦ "pqr"·Î ġȯ 12.2.7 º¹»ç¿Í ¼­ºêstring copy() ¸â¹ö ÇÔ¼ö´Â substringÀ» ¸¸µé¾î À̸¦ ù¹ø° ÀÎÀÚ·Î ÁÖ¾îÁø °÷¿¡ ´ëÀÔÇÑ´Ù. substringÀ» °¡¸®Å°´Â ±¸°£Àº óÀ½ À§Ä¡¸¸ ¸í½ÃÇϰųª, À§Ä¡¿Í ±æÀ̸¦ ¸í½ÃÇÑ´Ù. s3.copy(s4, 2); // s3ÀÇ 2¹ø À§Ä¡ºÎÅÍ ³¡±îÁö¸¦ s4¿¡ º¹»ç s5.copy(s4, 2, 3); // s5ÀÇ 2, 3, 4¹ø À§Ä¡¸¦ s4¿¡ º¹»ç substr() ¸â¹ö ÇÔ¼ö´Â ÇöÀç stringÀÇ ÀϺκÐÀ» ³ªÅ¸³»´Â stringÀ» ¸®ÅÏÇÑ´Ù. ±¸°£Àº óÀ½À§Ä¡·Î¸¸ ¸í½ÃÇϰųª, À§Ä¡¿Í ±æÀÌ·Î ¸í½ÃÇÑ´Ù. cout << s4.substr(3) << endl; // 3¹ø À§Ä¡ºÎÅÍ ³¡±îÁö Ãâ·Â cout << s4.substr(3, 2) << endl; // 3, 4¹ø À§Ä¡ Ãâ·Â 12.2.8 ºñ±³ [Image] stringÀÇ ºñ±³ compare() ¸â¹ö ÇÔ¼ö´Â ¼ö½ÅÀÚ¿Í ÀÎÀÚ string°£ÀÇ »çÀüÀûÀÎ ºñ±³¸¦ ¼öÇàÇϴµ¥ »ç¿ëµÈ´Ù. ´Ù¸¥ ÇÔ¼ö¿Í ºñ½ÁÇÏ°Ô, óÀ½À§Ä¡¸¸ ¸í½ÃÇϰųª óÀ½À§Ä¡¿Í ±æÀ̸¦ °°ÀÌ ¸í½ÃÇÒ ¼ö ÀÖ´Ù. »çÀü½Ä ¹è¿­À»¿¡ ´ëÇؼ­´Â 13.6.5ÀýÀ» Âü°íÇÑ´Ù. ¼öÁøÀÚ°¡ ÀÎÀÚº¸´Ù »çÀü¹è¿­»óÀ¸·Î ´õ ÀÛÀ¸¸é À½¼ö¸¦ ¸®ÅÏÇÏ°í, °°À¸¸é 0À», Å©¸é ¾ç¼ö¸¦ ¸®ÅÏÇÑ´Ù. °ü°è ¿¬»êÀÚ³ª »óµî¿¬»êµé(<, <=, >=, >, ==, !=)Àº ¸ðµÎ ºñ±³ ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© Á¤ÀǵȴÙ. ÀÓÀÇÀÇ µÎ string°£À̳ª, string°ú C ½ºÅ¸ÀÏÀÇ character literal(?)°£¿¡µµ ºñ±³°¡ °¡´ÉÇÏ´Ù. 12.2.9 °Ë»ö find() ¸â¹ö ÇÔ¼ö´Â Çö string¿¡¼­ ÀÎÀÚ·Î ÁÖ¾îÁø stringÀÌ Ã³À½À¸·Î ³ªÅ¸³ª´Â °÷À» ã¾Æ³½´Ù. Á¤¼ö°ªÀ» µÎ¹ø° ÀÎÀÚ·Î ÇÏ¿© °Ë»öÀÇ ½ÃÀÛÁ¡À» ¸í½ÃÇÒ ¼öµµ ÀÖ´Ù(»ý·« °¡´ÉÇÏ´Ù). ÇÔ¼ö°¡ ÀÏÄ¡ºÎºÐÀ» ãÀ¸¸é, Çö string¿¡¼­ÀÇ ÀÏÄ¡ºÎºÐÀÇ ½ÃÀÛÀ§Ä¡¸¦ ¸®ÅÏÇÑ´Ù. ¸øãÀ¸¸é, stringÀÇ ÇÕ´çÇÑ Ã·ÀÚ¸¦ ¹þ¾î³ª´Â °ªÀ» ¸®ÅÏÇÑ´Ù. rfind() ÇÔ¼ö°¡ ºñ½ÁÇÏÁö¸¸, ³¡¿¡¼­ºÎÅÍ °Å²Ù·Î ½ºÄµÇÑ´Ù. s1 = "mississippi"; cout << s1.find("ss") << endl; // 2¸¦ ¸®ÅÏ cout << s1.find("ss", 3) << endl; // 5¸¦ ¸®ÅÏ cout << s1.rfind("ss") << endl; // 5¸¦ ¸®ÅÏ cout << s1.rfind("ss", 4) << endl; // 2¸¦ ¸®ÅÏ find_first_of(), find_last_of(), find_first_not_of(), find_last_not_of()´Â ÀÎÀÚ·Î ÁÖ¾îÁø stringÀ» ÀϹÝÀûÀÎ ¹®ÀÚ¿­·Î º¸Áö ¾Ê°í ¹®ÀÚÀÇ ÁýÇÕÀ¸·Î º»´Ù. ´Ù¸¥ ÇÔ¼öµéó·³, Çϳª ¶Ç´Â µÎ°³ÀÇ Á¤¼ö ÀÎÀÚµé(»ý·«°¡´É)À» »ç¿ëÇÏ¿© ¹®ÀÚ¿­ÀÇ ¼­ºê½ºÆ®¸µÀ» ¸í½ÃÇÒ ¼ö ÀÖ´Ù. À̵é ÇÔ¼ö´Â ÀÎÀÚ·Î ÁÖ¾îÁø ¹®ÀÚÁýÇÕ¿¡ ¼ÓÇÏ´Â(¶Ç´Â ¼ÓÇÏÁö ¾Ê´Â) ù¹ø°(¶Ç´Â ¸¶Áö¸·) ¹®ÀÚ¸¦ ã´Â´Ù. ¿øÇÏ´Â ¹®ÀÚ¸¦ ã°Ô µÇ¸é ÁÖ¾îÁø ¹®ÀÚÀÇ À§Ä¡¸¦ ¸®ÅÏÇÏ°í, ãÁö ¸øÇϸé ÷ÀÚÀÇ À¯È¿¹üÀ§¸¦ ¹þ¾î³ª´Â °ªÀ» ¸®ÅÏÇÑ´Ù. i = s2.find_first_of("aeiou"); // ù¹ø° ¸ðÀ½ ã±â j = s2.find_first_not_of("aeiou", i); // ´ÙÀ½¹ø ÀÚÀ½ ã±â 12.3 ¿¹Á¦ ÇÔ¼ö - ÅؽºÆ® ¶óÀÎÀ» ´Ü¾îµé·Î ÂÉ°³±â ÀÌ Àý¿¡¼­´Â ÅؽºÆ® ¶óÀÎÀ» °³º°ÀûÀÎ ´Ü¾îµé·Î ÂÉ°³´Â ÇÔ¼ö¸¦ Çϳª Á¤ÀÇÇÏ¿©, ¾Õ¿¡¼­ ¼³¸íÇÑ string ÇÔ¼öµéÀÇ »ç¿ë¹ýÀ» ¼³¸íÇϱâ·Î ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â 9.3.3ÀýÀÇ concordance ¿¹Á¦¿¡¼­µµ »ç¿ëÇß´ø ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ¼¼°³ÀÇ ÀÎÀÚ°¡ ÇÊ¿äÇÏ´Ù. óÀ½ µÎ°³´Â stringÀε¥, Çϳª´Â ÅؽºÆ® ¶óÀÎÀÌ°í Çϳª´Â ´Ü¾îµéÀ» ±¸ºÐÇÏ´Â ±¸ºÐÀÚµéÀ» ³ªÅ¸³ª³½´Ù. ¼¼¹ø° ÀÎÀÚ´Â stringÀÇ list·Î, ¶óÀÎÀ¸·ÎºÎÅÍ ÃßÃâÇÑ ´Ü¾îµéÀÌ ´ã±â°Ô µÈ´Ù. void split(string& text, string& separators, list& words) { int n = text.length(); int start, stop; start = text.find_first_not_of(separators); while ((start >= 0) && (start < n)) { stop = text.find_first_of(separators, start); if ((stop < 0) || (stop > n)) stop = n; words.push_back(text.substr(start, stop - start)); start = text.find_first_not_of(separators, stop+1); } } ÀÌ ÇÔ¼ö´Â ¸ÕÀú ±¸ºÐÀÚ°¡ ¾Æ´Ñ ù¹ø° ¹®ÀÚ¸¦ ã´Â ÀϺÎÅÍ ½ÃÀÛÇÑ´Ù. while ·çÇÁ³»¿¡¼­´Â ÀÌÈÄ¿¡ ³ªÅ¸³ª´Â ±¸ºÐÀÚ¸¦ ã´Â´Ù. ¸¸¾à ±¸ºÐÀÚ¸¦ ãÁö ¸øÇϸé stringÀÇ ³¡À» »ç¿ëÇÑ´Ù. ÀÌµé µÑ°£ÀÇ Â÷°¡ ÇÑ ´Ü¾î¸¦ ±¸¼ºÇÏ°í, substring ¿¬»êÀ¸·Î º¹»çÇÏ¿© ¼¼¹ø° ÀÎÀÚ·Î »ðÀÔÇÑ´Ù. ±×¸®°í³ª¼­, ´ÙÀ½ ´Ü¾îÀÇ Ã¹¹ø° À§Ä¡¸¦ ã°í, ´ÙÀ½¹ø ·çÇÁ¸¦ ¹Ýº¹ÇÑ´Ù. 'start' º¯¼ö°¡ stringÀÇ ¹üÀ§¸¦ ¹þ¾î³ª¸é ¼öÇàÀ» ¸¶Ä£´Ù.