¡Ô ½ºÅ©¸³Æ® °­ÁÂ

 ¡å ½ºÅ©¸³Æ®ÀÇ ±¸Çö

C

¼Ò½ºÙí


±×·¸´Ù¸é ½ºÅ©¸³Æ®´Â ¾î¶»°Ô ±¸ÇöÇØ¾ß Çϴ°¡°¡ ¹®Á¦°¡ µÈ´Ù. ½ºÅ©¸³Æ®¶ó´Â °ÍÀº °ÔÀÓ¿¡ µµ¿òÀ» ÁÖ±â À§ÇÑ ÇϳªÀÇ ¼ö´ÜÀÌÁö¸¸ ±× ÀÚü°¡ °ÔÀÓ ÇÁ·Î±×·¡¹ÖÀÇ ¸ñÀûÀº ¾Æ´Ï´Ù. µû¶ó¼­ ½ºÅ©¸³Æ®ÀÇ Á߿伺¿¡ µû¶ó¼­ ½ºÅ©¸³Æ® ¿£ÁøÀÇ ±¸Çö Á¤µµ´Â ÆÇÀÌÇÏ°Ô ´Þ¶óÁø´Ù. À§¿¡¼­ ¿¹¸¦ µç °¡Àå °£´ÜÇÑ ÇüÅÂÀÇ ·ÑÇ÷¹À× °ÔÀÓÀÇ ½ºÅ©¸³Æ®¸¦ ´Ù½Ã º¸ÀÚ.

1. ½ºÅ©¸³Æ® ±¸Çö ¿¡Á¦


    01:  #À̸§: "¿ì¹Î1"
    02:  #ÃʱâÁÂÇ¥: (10,10)
    03:  #»ý±è»õ: 10
    04:  #´ëÈ­: "¸¶À» ³²ÂÊÀÇ µ¿±¼¿¡ ¿ëÀÌ »ì°í ÀÖ´Ù´Â Àü¼³ÀÌ ÀÖ¾î"
     

    ¿ì¼± ÀÌ°ÍÀº ÅؽºÆ® ÇüÅ·ΠÀúÀåµÇ¾î ÀÖ´Ù. µû¶ó¼­ ¿ì¸®´Â °¢°¢ÀÇ ¶óÀÎ º°·Î µ¥ÀÌÅ͸¦ °¡Á® ¿Ã ¼ö ÀÖ´Ù. ±×·¸´Ù¸é ±× ´ÙÀ½¿¡´Â ¹®ÀåÀ» ºÐ¸®ÇØ¾ß ÇÑ´Ù. °£´ÜÇÑ ÇüÅÂÀÇ ¹®ÀåÀÌÁö¸¸ º¯¼ö°¡ ÀÖ°í ±× º¯¼ö¿¡ µé¾î°¡´Â Ãʱ⠰ªÀÌ ÀÖ´Ù. ±×¸®°í ±×°ÍµéÀ» ±¸ºÐ¿¡ ÇØÁÖ´Â ±¸ºÐ ±âÈ£°¡ ÀÖ´Ù.

    °¡Àå ù ÁÙÀ» º¸ÀÚ. ¿©±â¼­ º¯¼ö´Â ¡®À̸§¡¯ÀÌ°í ±× º¯¼öÀÇ Ãʱ⠰ªÀº ¡®¡±¿ì¹Î1¡±ÀÌ´Ù. »ç¶÷ÀÇ ÀÔÀå¿¡¼­ º¸¸é ´«À¸·Î ±× µÎ °¡Áö¸¦ ºÐ¸®Çؼ­ nameÀ̶ó´Â º¯¼ö¿¡ ¡°¿ì¹Î1¡±À» ´ëÀÔÇÏ¸é µÇ´Â °ÍÀÌÁö¸¸ ÄÄÇ»ÅÍÀÇ °æ¿ì¿¡´Â ÆĽÌÀÇ °úÁ¤À» °ÅÃÄ¾ß ºñ·Î¼Ò ±×°ÍÀ» ºÐ¸®ÇÒ ¼ö ÀÖ´Ù. º¸¸é ¾Ë°ÚÁö¸¸ º¯¼ö´Â ¿¹¾àµÈ ±âÈ£¿¡ µÑ·¯ ½Î¿© ÀÖ´Ù.  ¡°#À̸§:¡±°ú °°ÀÌ »ç¿ëÀÚ°¡ ¾à¼ÓÇÑ ±âÈ£·Î ½ÃÀÛÇؼ­ »ç¿ëÀÚ°¡ ¾à¼ÓÇÑ ±âÈ£·Î ³¡³­´Ù. µû¶ó¼­ ¡®#¡¯ÀÌ ½ÃÀÛÇÏ´Â ´ÙÀ½ºÎÅÍ ¡®:¡±À¸·Î ³¡³ª±â Àü±îÁö°¡ º¯¼ö°¡ µÈ´Ù. (±×¸®°í ±× º¯¼öÀÇ ¾Õ µÚ¿¡ °ø¹é ¹®ÀÚ°¡ ÀÖ´Ù¸é ±×°ÍÀ» Á¦°ÅÇØÁÖ´Â °Í±îÁö°¡ ½ÇÁ¦ °úÁ¤ÀÌ µÉ °ÍÀÌ´Ù.) ±×¸®°í º¯¼ö¸¦ ÀоúÀ¸¸é ±× À§ÀÇ ¸ðµç µ¥ÀÌÅÍ´Â º¯¼öÀÇ °ªÀ̶ó°í º¼ ¼ö ÀÖ´Ù. ƯÈ÷ ¿©±â¼­ ¡®¡±¡¯À¸·Î µÑ·¯ ½ÎÀÎ °÷Àº ¹®ÀÚ¿­À̶ó°í ¾à¼ÓÇÏ¿´À¸¹Ç·Î ¹®ÀÚ¿­·Î Ãë±ÞµÇ¾î ÀúÀåµÈ´Ù.  µÎ ¹ø° ÁÙÀÇ °æ¿ì¿¡´Â °ýÈ£¿¡ µÑ·¯ ½ÎÀÎ ºÎºÐÀº ÁÂÇ¥¸¦ ³ªÅ¸³½´Ù°í ¾à¼ÓÇÏ¿´À¸¹Ç·Î ±×·¸°Ô ÀÐÀ¸¸é µÈ´Ù.

    ¾Æ·¡ÀÇ ÄÚµå´Â À§¿Í °°Àº ¹®ÀåÀ» Ç®¾î³»±â À§ÇØ °£·«ÇÏ°Ô ±¸ÇöÇغ» °ÍÀÌ´Ù.

    ¸ÕÀú ÇÊ¿äÇÑ ±âº» ÇÔ¼öµéÀÌ ÇÊ¿äÇÏ´Ù. ¹°·Ð CÀÇ ½ºÅÄ´Ùµå ¶óÀ̺귯¸®¸¸À¸·Îµµ ½ºÅ©¸³Æ®¸¦ Àд µ¥´Â ¹®Á¦°¡ ¾ø±ä ÇÏÁö¸¸ ¾Æ¹«·¡µµ ÀÚÁÖ ¾²ÀÌ´Â ¸î¸î ±â´É¿¡ ´ëÇؼ­´Â ¹Ì¸® ÇÔ¼ö·Î ¸¸µé¾î µÎ´Â °ÍÀÌ ÁÁ´Ù. ¸ÕÀú ÀÚ·áÇüÀ» Çϳª ¼±¾ðÇØ¾ß ÇÑ´Ù.


    01:  typedef char STRING[256];
     

    ÀÌ°ÍÀº ´Ü¼øÇÏ°Ô Ä³¸¯ÅÍÇü ¹è¿­À» STRINGÀ̶ó´Â À̸§ÀÇ Å¸ÀÔÀ¸·Î ¼±¾ðÇÑ °ÍÀ̸ç ÀÌÈÄÀÇ ¸ðµç ½ºÅ©¸³Æ® ÅؽºÆ®ÀÇ ¶óÀÎÀº ÀÌ ÇüÅ·ΠÀÐ°Ô µÈ´Ù.


    01:  void ReplaceChar(STRING s, char srcChar, char dstChar)
    02:  {
    03:     int i, len = strlen(s);
    04:     for (i = 0; i < len; i++)
    05:        if (s[i] == srcChar)
    06:           s[i] = dstChar;
    07:  }
     

    ÀÌ ÇÔ¼ö´Â s¶ó´Â ½ºÆ®¸µ¿¡ ÀÖ´Â srcChar¶ó´Â ÇϳªÀÇ ¹®ÀÚ¸¦ dstChar¶ó´Â ¹®ÀÚ·Î ¹Ù²Ù´Â ±â´ÉÀ» ÇÑ´Ù. ÅؽºÆ® ÆÄÀÏ¿¡´Â ¹®ÀÚ ÀÌ¿Ü¿¡ »ç¿ëÀÚ°¡ Á¦¾î ¹®ÀÚ¸¦ »ðÀÔÇÒ ¼ö Àֱ⠶§¹®¿¡ ±×°ÍµéÀ» Á¦°Å Çϰųª ´ëÄ¡Çϴµ¥ »ç¿ëµÈ´Ù. ÁÖ·Î ÅÇ ¹®ÀÚ °°ÀÌ °ø¹é ±â´ÉÀ» ÇÏ´Â ¹®ÀÚµéÀ» °ø¹é ¹®ÀÚ·Î ´ëÄ¡ÇÏ¿© »ç¿ëÇϴµ¥ »ç¿ëµÈ´Ù.


    01:  #define COPY_STRING(dest, sour, offset, length)    \
    02:     do                                              \
    03:     {                                               \
    04:        int len = (length);                          \
    05:        strncpy(dest, sour + (offset), len);         \
    06:        dest[len] = 0;                               \
    07:     } while(0);
     

    ÀÌ°ÍÀº ¸ÅÅ©·ÎÀ̸ç CÀÇ Ç¥ÁØ ¶óÀ̺귯¸®¿¡ ÀÖ´Â strcpy()ÀÇ ¿ë¹ýÀ» ¾à°£ ¼öÁ¤ÇÑ °ÍÀÌ´Ù. sour¶ó´Â ½ºÆ®¸µÀÇ offset¹ø°ºÎÅÍ length ¸¸Å­ÀÇ ¹®ÀÚ¿­À» dest¿¡ º¹»çÇÏ´Â ±â´ÉÀ» ÇÑ´Ù. ÀÌ°ÍÀº ¾ÕÀ¸·Î ³ª¿Ã ÇÔ¼öÀÇ ±â´ÉÀ» °£·«ÇÏ°Ô º¸ÀÌ°Ô Çϱâ À§ÇØ »ç¿ëµÇ´Â ¸ÅÅ©·ÎÀÌ´Ù.


    01:  void FetchWord(STRING fetchStr, STRING srcStr, char separater)
    02:  {
    03:     int   divider;
    04:     char  subStr[2] = {separater, 0};
    05:     char *tempStr;
    06:  
    07:     if (tempStr = strstr(srcStr, subStr))
    08:     {
    09:        divider = (tempStr - srcStr) + 1;
    10:  
    11:        COPY_STRING(fetchStr, srcStr, 0, divider - 1)
    12:        COPY_STRING(srcStr, srcStr, divider, strlen(srcStr)-divider)
    13:     }
    14:     else
    15:     {
    16:        strcpy(fetchStr, srcStr);
    17:        strcpy(srcStr, "");
    18:     }
    19:  }
     

    ÀÌ°ÍÀº ½ºÅ©¸³Æ®¿¡¼­ ¸í·É¾î¸¦ ºÐ¸®Çϰųª ÆĶó¹ÌÅ͸¦ ºÐ¸®Çϱâ À§ÇÑ ±âº» ÇÔ¼öÀÌ´Ù. srcStrÀ̶ó´Â ½ºÆ®¸µ¿¡¼­ separater¶ó´Â ´Ü¾î¸¦ ±âÁØÀ¸·Î ¾ÕÂÊÀÇ ¹®ÀÚ¿­À» fetchStr¿¡ Áý¾î ³Ö°í µÚÂÊÀÇ ¹®ÀÚ¿­¸¸ srcStr¿¡ µÇµ¹·Á ÁØ´Ù. ¿¹¸¦ µé¾î, SetValue(10,10); À̶ó´Â ¹®ÀåÀÌ ÀÖÀ» ¶§ ¡®(¡®¸¦ ±âÁØÀ¸·Î ¡®SetValue¡¯¶ó´Â ¸í·É¾î¿Í ³ª¸ÓÁö ºÎºÐÀÎ ¡°10,10);¡±À» ºÐ¸®ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù.


    01:  typedef enum tagSHURINKMODE
    02:  {
    03:     SHURINKMODE_FORWARD,
    04:     SHURINKMODE_BACKWARD,
    05:     SHURINKMODE_ALLDIRECTION,
    06:     SHURINKMODE_ALLCHARACTER
    07:  } SHURINKMODE;
    08:  
    09:  void ShurinkString(STRING s, char ch, SHURINKMODE mode)
    10:  {
    11:     int    i, j, len;
    12:     STRING aux;
    13:  
    14:     len = (int)strlen(s);
    15:  
    16:     switch (mode)
    17:     {
    18:     case SHURINKMODE_FORWARD:
    19:        for (i = 0; (i < len) && (s[i] == ch); i++);
    20:        COPY_STRING(aux, s, i, strlen(s) - i + 1)
    21:        break;
    22:  
    23:     case SHURINKMODE_BACKWARD:
    24:        for (i = len-1; (i > 0) && (s[i] == ch); i--);
    25:        COPY_STRING(aux, s, 0, i + 1)
    26:        break;
    27:  
    28:     case SHURINKMODE_ALLDIRECTION:
    29:        for (i = 0; (i < len) && (s[i] == ch); i++);
    30:        COPY_STRING(aux, s, i, strlen(s) - i + 1)
    31:        for (i = strlen(aux)-1; (i > 0) && (aux[i] == ch); i--);
    32:        COPY_STRING(aux, aux, 0, i + 1)
    33:        break;
    34:  
    35:     case SHURINKMODE_ALLCHARACTER:
    36:        int cantSkip = 0x01;
    37:  
    38:        // " ¸¦ º¯°æÇÒ ¶§´Â ¹«Á¶°Ç º¯°æ
    39:        if (ch == '\"')
    40:           cantSkip |= 0x02;
    41:        
    42:        for (i = 0, j = 0; i < len; i++)
    43:        {
    44:           if (s[i] == '\"')
    45:              cantSkip ^= 0x01;
    46:  
    47:           if ((cantSkip == 0) || (s[i] != ch))
    48:              aux[j++] = s[i];
    49:        }
    50:        aux[j] = 0;
    51:        break;
    52:     }
    53:  
    54:     strcpy(s, aux);
    55:  }
     

    ÇÔ¼ö Äڵ尡 ¼³¸íÇϱ⿡´Â Á» ±ä ´À³¦ÀÌ ÀÖ´Ù. ±â´ÉÀº s¶ó´Â ½ºÆ®¸µ¿¡¼­ ch¶ó´Â ¹®ÀÚ¸¦ modeÀÇ ¹æ¹ý¿¡ µû¶ó Á¦¾îÇÏ´Â ±â´ÉÀ» ÇÑ´Ù.

    modeÀÇ °ª

    ±â´É

    SHURINKMODE_FORWARD

    ¹®ÀÚ¿­ÀÇ ¾ÕÂÊÀÇ ch¸¦ Á¦°ÅÇÑ´Ù.

    SHURINKMODE_BACKWARD

    ¹®ÀÚ¿­ÀÇ µÚÂÊÀÇ ch¸¦ Á¦°ÅÇÑ´Ù.

    SHURINKMODE_ALLDIRECTION

    ¹®ÀÚ¿­ÀÇ ¾çÂÊÀÇ ch¸¦ Á¦°ÅÇÑ´Ù.

    SHURINKMODE_ALLCHARACTER

    ¹®ÀÚ¿­ Àüü¿¡¼­ ch¸¦ Á¦°ÅÇÑ´Ù.

    ½ºÅ©¸³Æ®¸¦ ¸¸µå´Â »ç¶÷°ú ÇÁ·Î±×·¡¸Ó°¡ °°Àº »ç¶÷À̶ó¸é ¾à¼Ó¿¡ ÀÇÇØ Á¤È®ÇÏ°Ô ½ºÅ©¸³Æ® Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖÀ»Áöµµ ¸ð¸£°ÚÁö¸¸, ÀϹÝÀûÀ¸·Î´Â ±×·¸Áö°¡ ¾Ê´Â °æ¿ì°¡ ¸¹´Ù. µû¶ó¼­ ½ºÅ©¸³Æ® ÀÛ¼ºÇÏ´Â »ç¶÷ÀÇ ÄÚµå ÀÛ¼º ÃëÇâÀ̳ª ½À°ü°°ÀÌ ¿¹»óÇϱ⠾î·Á¿î »óȲµéÀÌ ½ºÅ©¸³Æ® Äڵ忡 µé¾î °¥ ¼ö°¡ Àִµ¥ ÀÌ·± °ÍµéÀ» Á¦°ÅÇϱâ À§Çؼ­ »ç¿ëÇÏ´Â °ÍÀÌ ¹Ù·Î À§ÀÇ ÇÔ¼öÀÌ´Ù. ƯÈ÷ ½ºÆäÀ̽ºÀÇ ³²¿ëÀ̳ª °£´ÜÇÑ ¹®¹ýÀÇ ½Ç¼öµéÀ» ´«°¨¾Æ ÁÖ±â À§Çؼ­µµ »ç¿ëµÈ´Ù. (¹°·Ð °³¹ß °úÁ¤¿¡¼­´Â ¹®¹ý¿¡¼­ ½Ç¼ö°¡ ÀÖÀ» ¶§ Á¤È®ÇÏ°Ô Àâ¾Æ ÁÖ´Â °ÍÀÌ ÇÊ¿äÇÏ°ÚÁö¸¸, ÃÖÁ¾ ¸±¸®Áî ¹öÀü¿¡¼­´Â ½ºÅ©¸³Æ® ¿¡·¯ ¶§¹®¿¡ °ÔÀÓÀÌ ¸ØÃß´Â ÀÏÀº ¾ø¾î¾ß ÇϹǷΠ¹®¹ý ½Ç¼ö¿¡ ´ëÇؼ­ °¡Àå ¿¹ÃøÇϱ⠽¬¿î ÂÊÀ¸·Î ½ºÅ©¸³Æ®¸¦ Çؼ®ÇÏ´Â ¹æ¹ý·ÐÀÌ ÇÊ¿äÇÏ´Ù.)

    À§ÀÇ ¸ðµâÀ» ÀÌ¿ëÇؼ­ °¡Àå óÀ½¿¡ Á¦½ÃÇÑ ½ºÅ©¸³Æ®¸¦ Àд ÇÁ·Î±×·¥Àº ´ÜÇົÀ» ±¸ÀÔÇÏ¸é ºÎ·Ï CD¿¡ ÀÖ´Ù. (¹°·Ð ´ÜÇົÀº ³ª¿ÀÁö ¾ÊÀ» °ÍÀÌ´Ù.)