19-1.µ¿Àû ¹è¿­

19-1-°¡.¹è¿­ ¿ä¼ÒÀÇ »ðÀÔ, »èÁ¦

¹è¿­Àº C¾ð¾î°¡ Á¦°øÇÏ´Â °¡Àå ±âº»ÀûÀÎ ÀÚ·á ±¸Á¶ÀÌ¸ç ¿ö³« ´Ü¼øÇϱ⠶§¹®¿¡ ´©±¸³ª ½±°Ô Àͼ÷ÇØÁú ¼ö ÀÖ´Ù. ¹è¿­ÀÇ ÀåÁ¡Àº Å©°Ô µÎ °¡Áö°¡ Àִµ¥ ù °·Î ±¸Á¶°¡ ´Ü¼øÇϱ⠶§¹®¿¡ Á¤º¸ ÀÚü¸¦ ±â¾ïÇÏ´Â ¸Þ¸ð¸® ¿Ü¿¡ Ãß°¡·Î ¼Ò¸ðÇÏ´Â ¸Þ¸ð¸®°¡ ÀüÇô ¾ø¾î °ø°£ È¿À²ÀÌ ÁÁ´Ù. Á¤¼öÇü º¯¼ö 100°³¸¦ ÀúÀåÇÏ´Â int ar[100] ¹è¿­Àº Á¤È®ÇÏ°Ô Á¤¼ö 100°³ºÐ¸¸Å­ÀÇ ¸Þ¸ð¸®¸¸À» ¿ä±¸ÇÑ´Ù.

µÑ °·Î ¹è¿­ Å©±â°¡ ¾Æ¹«¸® Ä¿Áö´õ¶óµµ °Ë»ö ¼Óµµ°¡ ÀÏÁ¤ÇÏ´Ù. ¹è¿­ÀÇ Ã·ÀÚ ¿¬»êÀº Æ÷ÀÎÅ͸¦ ÅëÇØ ½ÃÀÛ ¹øÁö¿¡ ÷ÀÚ*¿ä¼ÒÅ©±â¸¦ ´õÇÏ´Â °£´ÜÇÑ µ¿ÀÛÀ̹ǷΠÀÓÀÇÀÇ ÇÑ ¿ä¼Ò¸¦ ÂüÁ¶ÇÏ´Â ½Ã°£ÀÌ »ó¼öÀÌ´Ù. int ar[10]¿¡¼­ ar[9]¸¦ ÂüÁ¶ÇÏ´Â ½Ã°£°ú int ar[1000]¿¡¼­ ar[999]¸¦ ÂüÁ¶ÇÏ´Â ½Ã°£ÀÌ ¶È°°´Ù´Â ¾ê±âÀÌ´Ù. ÀÌó·³ ¹è¿­Àº ¸Þ¸ð¸® ¿ä±¸·®À̳ª ¼Óµµ¸é¿¡¼­ ¸ðµÎ ¸¸Á·ÇÒ¸¸ÇÑ ¼º´ÉÀ» º¸À̴µ¥ ¿ä¾àÇÏÀÚ¸é ÀÛ°í ºü¸¥ ÀڷᱸÁ¶ÀÌ´Ù. °Ô´Ù°¡ ¾²±âµµ ½¬¿ö ´Ù¾çÇÑ ¿ëµµ¿¡ ¾ÆÁÖ ¿ä±äÇÏ°Ô »ç¿ëµÈ´Ù.

±×·¯³ª ÀÌ·± Æí¸®ÇÑ ¹è¿­¿¡µµ ÇÑ °¡Áö ´ÜÁ¡ÀÌ Àִµ¥ ¹è¿­ ¿ä¼Ò°¡ ¿¬¼ÓµÈ ¸Þ¸ð¸® °ø°£¿¡ ¹èÄ¡µÇ¾î ÀÖ¾î¾ß ÇϹǷΠÁß°£ÀÇ ¿ä¼Ò¸¦ »èÁ¦Çϰųª »õ·Î¿î ¿ä¼Ò¸¦ »ðÀÔÇÒ ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù. ¹è¿­Àº ÀϹÝÀûÀ¸·Î »ðÀÔ, »èÁ¦°¡ ¾ÈµÇ´Â °ÍÀ¸·Î ¾Ë·ÁÁ® Àִµ¥ ÀÌ´Â ÀÏÁ¾ÀÇ °íÁ¤ °ü³äÀÌ´Ù. ¹æ¹ýÀ» ã¾Æ º¸¸é Á¶±Ý ºÒÆíÇϱâ´Â ÇÏÁö¸¸ ÀüÇô ºÒ°¡´ÉÇÑ °ÍÀº ¾Æ´Ï´Ù. ´ÙÀ½ ¿¹Á¦´Â ¹®ÀÚÇü ¹è¿­À» ´ë»óÀ¸·Î »ðÀÔ, »èÁ¦ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù.

 

¿¹ Á¦ : ArrayInsDel

#include <Turboc.h>

 

char ar[16]="abcdef";

 

void Insert(int idx, char ch)

{

     memmove(ar+idx+1,ar+idx,strlen(ar)-idx+1);

     ar[idx]=ch;

}

 

void Delete(int idx)

{

     memmove(ar+idx,ar+idx+1,strlen(ar)-idx);

}

 

void Append(char ch)

{

     Insert(strlen(ar),ch);

}

 

void main()

{

     printf("ÃÖÃÊ : %s\n",ar);

     Insert(3,'t');printf("t»ðÀÔ : %s\n",ar);

     Delete(1);printf("b»èÁ¦ : %s\n",ar);

     Append('s');printf("sÃß°¡ : %s\n",ar);

}

 

¹®ÀÚÇü ¹è¿­ ar¿¡ "abcdef"¶ó´Â ÀÏ·ÃÀÇ ¹®ÀÚµé(¹®ÀÚ¿­)À» ÀúÀåÇØ ³õ°í ¹®ÀÚ Áß°£¿¡ ´Ù¸¥ ¹®ÀÚ¸¦ »ðÀÔÇϰųª »èÁ¦ÇÑ´Ù. ½ÇÇà °á°ú¸¦ º¸¸é ¹®ÀÚ Áß°£¿¡ ´Ù¸¥ ¹®ÀÚ°¡ ³¢¾îµé±âµµ ÇÏ°í »ç¶óÁö±âµµ ÇÑ´Ù.

 

ÃÖÃÊ : abcdef

t»ðÀÔ : abctdef

b»èÁ¦ : actdef

sÃß°¡ : actdefs

 

Insert ÇÔ¼ö´Â ¹è¿­ÀÇ idx¹øÂ° ¿ä¼Ò¿¡ ch¹®ÀÚ¸¦ »ðÀÔÇϴµ¥ 12Àå¿¡¼­ ¿¬±¸ÇØ º» ¹Ù ÀÖ´Â ¸Þ¸ð¸® À̵¿ ÇÔ¼öÀÎ memmove¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö·Î »ðÀ﵃ À§Ä¡ ÀÌÈÄÀÇ ¹®ÀÚµéÀ» ÇÑÄ­¾¿ µÚ·Î À̵¿½ÃÄÑ »õ ¿ä¼Ò°¡ »ðÀ﵃ °ø°£À» ¸¸µç´Ù. À̵¿À» ½ÃÀÛÇÒ À§Ä¡´Â ¹è¿­ ¼±µÎ ar¿¡¼­ºÎÅÍ idx µÚÂÊÀÎ ar+idxÀ̰í ÀÌ ¹øÁö ÀÌÈĺÎÅÍ ÇÑÄ­¾¿ µÚ·Î ¹Ð¾î¾ß ÇϹǷΠar+idx+1 ¹øÁö°¡ À̵¿ ¸ñÀûÁöÀÌ´Ù.

À̵¿ÇÒ ±æÀÌ´Â À̵¿ ½ÃÀÛ ¹øÁö µÚÂÊÀÇ ³²Àº ¿ä¼Ò °³¼öÀε¥ ÀÌ °³¼ö´Â Àüü ±æÀÌÀÎ strlen(ar)¿¡¼­ À̵¿ ½ÃÀÛ ¿ä¼ÒÀÇ ¹øÈ£ÀÎ idx¸¦ »©¼­ ±¸Ç쵂 ³Î Á¾·á ¹®ÀÚµµ Æ÷ÇÔ½ÃÄÑ¾ß ÇϹǷΠ1À» ´õÇØ ÁÖ¾ú´Ù. memmove ÇÔ¼ö´Â ¹ÙÀÌÆ® ´ÜÀ§ÀÇ À̵¿ ±æÀ̸¦ ¿ä±¸ÇϹǷΠÀ̵¿ÇÒ ¿ä¼Ò °³¼ö¿¡ ¿ä¼Ò ŸÀÔÀÇ Å©±âÀÎ sizeof(char)¸¦ °öÇØ¾ß Çϳª ÀÌ °æ¿ì´Â ¿ä¼Ò Å©±â°¡ 1À̹ǷΠ»ý·«ÇÒ ¼ö ÀÖ´Ù. Insert(3,'t') È£ÃâÀÇ µ¿ÀÛÀ» »ìÆìº¸¸é ´ÙÀ½°ú °°´Ù.

ar+3¹øÁö ÀÌÈÄÀÇ ³»¿ëÀ» ar+4¹øÁö·Î À̵¿Çϸç ÃÑ À̵¿ ±æÀÌ´Â ar+3 µÚÂÊ¿¡ ÀÖ´Â 3¹®ÀÚ¿¡ ³Î Á¾·á ¹®ÀÚ¸¦ ´õÇØ 4¹ÙÀÌÆ®¸¸Å­ÀÌ´Ù. ar+3Àº ar+4·Î, ar+4´Â ar+5·Î ¹è¿­ ³¡±îÁö ÇÑ Ä­¾¿ ¿À¸¥ÂÊÀ¸·Î À̵¿ÇÏ´Â ¼ÀÀÌ´Ù. memmove È£ÃâÀÇ °á°ú·Î d°¡ ÀÖ´ø ÀÚ¸®°¡ ºñ¿öÁö´Âµ¥ ÀÌ ÀÚ¸®¿¡ »ðÀÔÇϰíÀÚ ÇÏ´Â ¹®ÀÚ¸¦ ´ëÀÔÇÏ¸é µÈ´Ù. ¹è¿­ÀÇ Ã·ÀÚ ¿¬»êÀÌ ´Ü¼øÇÑ °ö¼À°ú µ¡¼À¸¸À¸·Î °¡´ÉÇϱâ À§Çؼ­´Â ¹è¿­À» ±¸¼ºÇÏ´Â ¿ä¼ÒµéÀÌ ¹°¸®ÀûÀ¸·Î ¿¬¼ÓÀûÀÎ ¸Þ¸ð¸® °ø°£¿¡ ÀúÀåµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù´Â ÀüÁ¦ Á¶°ÇÀÌ ¸¸Á·µÇ¾î¾ß ÇÑ´Ù.

memmove´Â »ðÀ﵃ À§Ä¡ ÀÌÈĸ¦ µÚ·Î º¹»çÇÔÀ¸·Î½á »ðÀÔ ÈÄ¿¡µµ ¹è¿­ÀÌ ÀÌ Á¶°ÇÀ» ¸¸Á·Çϵµ·Ï ÇÑ´Ù. ¶ÇÇÑ memmove ÇÔ¼ö´Â À̵¿ ½ÃÀÛ ¹øÁö¿Í À̵¿ ¸ñÀûÁöÀÇ ¹øÁö°¡ °ãÃÄ ÀÖÀ» ¶§(overlap) À̵¿ ¹æÇâÀ» Á¶Á¤ÇÏ¿© º¹»çµÇ±â ÀüÀÇ ¿øº»ÀÌ ±úÁöÁö ¾Êµµ·Ï ÇÑ´Ù. À§ ¿¹¿¡¼­ ar+3À» ar+4·Î º¹»çÇØ ¹ö¸®¸é ´ÙÀ½ À̵¿ ´ë»óÀÎ ar+4°¡ ÆÄ±«µÇ¾î ¹ö¸®¹Ç·Î ar+5ºÎÅÍ´Â °è¼Ó ar+3ÀÇ °ªÀ» °¡Áö°Ô µÉ °ÍÀÌ´Ù. ÀÌ·± °æ¿ì ¶È¶ÈÇÑ memmove´Â µÚÂÊ¿¡¼­ºÎÅÍ º¹»ç¸¦ ÇÔÀ¸·Î½á º¹»çÀüÀÇ ¿øº»ÀÌ ÆÄ±«µÇÁö ¾Êµµ·Ï ÇÑ´Ù. ÇÔ¼ö ³»ºÎ¿¡¼­ ¾Ë¾Æ¼­ Á¤È®ÇÑ º¹»ç¸¦ Çϵµ·Ï µÇ¾î ÀÖÀ¸¹Ç·Î °³¹ßÀÚµéÀº ¾îµð¼­ºÎÅÍ ¾îµð±îÁö ¾ó¸¶¸¸Å­ º¹»çÇ϶ó´Â ÃÖ¼ÒÇÑÀÇ ÀÇ»ç Ç¥½Ã¸¸ ÇÏ¸é µÈ´Ù.

Delete ÇÔ¼ö´Â idx¹øÂ° ¿ä¼Ò¸¦ »èÁ¦Çϴµ¥ Insert ÇÔ¼öº¸´Ù ÈξÀ ´õ ½±´Ù. »èÁ¦ÇÒ ¿ä¼ÒÀÇ µÚ¿¡ ÀÖ´Â ¸ðµç ¿ä¼Ò¸¦ ÇÑÄ­¾¿ ¾ÕÂÊÀ¸·Î À̵¿½Ã۱⸸ ÇÏ¸é µÈ´Ù. À̵¿ÇÒ ±æÀÌ´Â »èÁ¦ ´ë»ó ¿ä¼Ò ÀÌÈÄÀÇ ³²Àº ¿ä¼Ò °³¼ö¿¡ ³Î Á¾·á ¹®ÀÚºÐÀ» ´õÇÑ ±æÀ̸¸Å­ÀÌ´Ù. ³²Àº ¿ä¼Ò °³¼ö´Â ÃÑ ±æÀÌÀÎ strlen(ar)¿¡¼­ »èÁ¦ ´ë»ó ¿ä¼Ò ´ÙÀ½ ¹øÈ£ÀÎ idx+1À» »©°í ¿©±â¿¡ ³Î Á¾·á ¹®ÀÚºÐÀÎ 1À» ´õÇÏ¸é µÈ´Ù. strlen(ar)-(idx+1)+1·Î °è»êµÇ´Âµ¥ -1+1Àº »ó¼âµÇ¾î »ç¶óÁø´Ù.

b°¡ ÀÖ´ø ÀÚ¸®¿¡ c°¡ ¿À°í c°¡ ÀÖ´ø ÀÚ¸®¿¡ t°¡ ¿À´Â ½ÄÀ¸·Î ¸ðµç ¿ä¼Ò°¡ ÇÑÄ­¾¿ ¾ÕÂÊÀ¸·Î À̵¿Çϸç b´Â ¹Ù·Î µÚÂÊ ¿ä¼ÒÀÎ c·Î µ¤¿©Á® »ç¶óÁø´Ù. ¹è¿­ ³¡¿¡ »õ ¿ä¼Ò¸¦ Ãß°¡ÇÏ´Â Appendµ¿ÀÛÀº ¹è¿­ ³¡¿¡ »ðÀÔÇÏ´Â °Í°ú °°À¸¹Ç·Î Insert¸¦ ´ë½Å È£ÃâÇ쵂 »ðÀÔÇÒ À§Ä¡¸¦ NULL ¹®ÀÚ°¡ ÀÖ´Â À§Ä¡ÀÎ strlen(ar)·Î ÁöÁ¤ÇÏ¸é µÈ´Ù.

ÀÌ ¿¹Á¦·Î ½ÇÇèÇØ ºÃ´Ù½ÃÇÇ ¹è¿­µµ ¿ä¼Ò¸¦ ¾ÕµÚ·Î À̵¿½ÃŰ¸é »ðÀÔ°ú »èÁ¦°¡ °¡´ÉÇϱâ´Â ÇÏ´Ù. ¸Þ¸ð¸®¸¦ Á÷Á¢ À̵¿½ÃÄÑ¾ß ÇϹǷΠ»ðÀÔ ¼Óµµ°¡ ´Ù¼Ò ´À¸° ÆíÀε¥ ¹è¿­ÀÌ ±æ¼ö·Ï, »ðÀÔ À§Ä¡°¡ ¾ÕÂÊÀϼö·Ï À̵¿ ½Ã°£Àº ´õ ¿À·¡ °É¸± °ÍÀÌ´Ù. ÇÏÁö¸¸ »ðÀÔ, »èÁ¦´Â Àб⳪ Ãß°¡ µ¿ÀÛº¸´Ù ºóµµ°¡ ³·°í memmove´Â ±²ÀåÈ÷ °í¼ÓÀ¸·Î µ¿ÀÛ(ÃÊ´ç 20¾ï ¹ÙÀÌÆ® Á¤µµ)Çϱ⠶§¹®¿¡ ¿ì·ÁÇϴ¸¸Å­ ´À¸®Áö ¾Ê´Ù. memmoveÀÇ ³»ºÎ ÄÚµå´Â ·çÇÁ¸¦ µ¹¸®´Â CÄڵ尡 ¾Æ´Ï¸ç CPU°¡ Çϵå¿þ¾îÀûÀ¸·Î Á÷Á¢ ó¸®ÇÏ´Â ¸¶ÀÌÅ©·Î ÄÚµåÀ̹ǷΠ»ó»óÀ» ºÒÇãÇÒ Á¤µµ·Î ºü¸£´Ù.