바람이 머문 언덕

c문자열 함수 흉내 내기 => 문자열 제거 본문

컴퓨터 IT/C++ 언어

c문자열 함수 흉내 내기 => 문자열 제거

알 수 없는 사용자 2010. 1. 18. 13:25
반응형
문자열 제거 함수를 흉내 내어 보았습니다.
프로그램을 하다가 보면은 문자열을 가지고 하는 작업이 많죠.

문자열 관련 함수를 이미 만들어 진 것을 사용 해도 되지만 간단한 것은 직접 만들면서 c 제어문의 사용 법에 익숙해지는 것도 좋은 방법 중 하나라고 생각 합니다.

#include <iostream> 출력 예제로 입출력은 c++의 i/o 스트림을 이용 했습니다.

int delchar(char *buf, char *a);     // 문자열 buf에서 문자열 a를 모두 제거
int delSchar(char *buf, char *a);   // 문자열 buf에서 제일 처음에 나타나는 문자열 a를 제거
int delEchar(char *buf, char *a);   // 문자열 buf에서 제일 마지막에 나타나는 문자열 a를 제거

using namespace std;              
int main(int argc, _TCHAR* argv[])
{ ;
    char buf[25]="124abcd123absdf123", a[20]="12";
    cout<<buf<< '\n';
    delEchar(buf, a);
    cout<<buf<< '\n';
    system("PAUSE");   // 프로그램을 바로 종료하지 않고 키 입력을 기다린다.
   return 0;


}



// 뒤에서 부터 문자열을 찾아서 제거하는 함수
int delEchar(char *buf, char *a)  
{
    int ik = strlen(buf), ib=strlen(a);
    if(ib>0 && ik>=ib)                    // 삭제할여는 문자가 있어면
    {
        ib--; ik--;                          // 문자열의 배열의 끝 기억  (c에서 배열은 0부터 시작)
        int n, i=ik;
        while(i>=0)                       
        {
            if(buf[i]==a[ib])           // 문자열 buf에서 문자열 a의 마지막 문자를 찾으면
            {  
                for(n=ib; buf[i] == a[n]; n--)  
                {           
  
                    if(n == 0)        // 같은 문자를 찾으면      
                    {
                      
                        for(; buf[i+ib] !='\0'; i++)  // buf에서 문자 삭제
                        {                                      
                            buf[i] = buf[i+ib+1];
                        }
                        buf[ik-ib]='\0';
                        return 1;
                    }
                    i--;
                } 
                continue;
            }
            i--;
        } 
    }
    return 0;
}

// 앞에서 부터 문자를 찾아서 제일 처음에 나오는 문자열 삭제
int delSchar(char *buf, char *a)
{
    int n=0, k=0;
    for(int i=0; buf[i]!='\0'; i++)
    {
       if(buf[i]==a[n])
       {
           k = i;
           while(buf[i]==a[n]) 
           {
               if(a[++n]=='\0')
               {          
                   for(k; buf[k+n]!='\0'; k++)
                   {                  
                       buf[k] = buf[k+n];
                   }
                   buf[k]='\0';
              
                   return 1;
               }
               i++;
           }
           n=0;
           i--;
       }
    }
    return 0;
}

// 같은 문자열 모두 삭제
int delchar(char *buf, char *a)
{
    int n=0, k=0, s = 0;
    for(int i=0; buf[i]!='\0'; i++)
    {
       if(buf[i]==a[n])
       {
           k = i;
           while(buf[i]==a[n]) 
           {
               if(a[++n]=='\0')
               {          
                   for(k; buf[k+n]!='\0'; k++)
                   {       
                       s=1;
                       buf[k] = buf[k+n];
                   }
                   buf[k]='\0';
              
                   break;
               }
               i++;
           }
           n=0;
           i--;
       }
    }
    return s;
}