바람이 머문 언덕

c의 문자열 관련 함수 흉내내기 본문

컴퓨터 IT/C++ 언어

c의 문자열 관련 함수 흉내내기

알 수 없는 사용자 2009. 11. 25. 15:45
반응형

c언어의 문자열 관련 함수들을 흉내어 보았습니다.

 void ncma(char *sfc)        // 숫자 3자리 마다 ',' 찍어 주는 함수
{
    unsigned int m,m1,i,p=0,k=0,cl=0;
    if(sfc[0]=='-') p=4;
   while(sfc[cl]!='\0') cl++; i=cl;
   m=cl/3+i;
   if((m1=cl%3)==0){m--;m1=3;}
   else if(p==4&&m1==1){ m1=4; m--; }
   sfc[m--]=sfc[i--];
   while(m>m1)
  {
     sfc[m--]=sfc[i--];
     if(k++==2)
     {
       sfc[m--]=','; k=0;
     }
   }
}

void Nstrcopy(char *buf1, char *buf2) // buf1에 buf2를 복사
{
   int i=0;
   do
   {
       buf1[i]=buf2[i];
   }
   while(buf2[i++]!='\0');
}

void Nstrncpy(char *buf1, char *buf2, int i) // buf1에 buf2를 k만큼 복사
{
      while(i>0)
      {
          i--; buf1[i]=buf2[i];
      }
}

int Nstrlen(char *buf)      // 문자열의 길이를 구한다.
{
     int i=0; while(buf[i]!='\0') i++;
     return 0;
}

void Nstrcat(char *buf1, char *buf2)   // buf1에 buf2를 추가
{
    int i=0; while(buf1[i]!='\0') i++;
    buf1=&buf1[i]; i=0;
   do { buf1[i]=buf2[i]; }
   while(buf2[i++]!='\0');
}

void  Ndelchar(char *buf, char &c) //buf에 있는 특정 문자를 제거 delchar
{
    int i=0, k=0;
    do
   {
       if(buf[i]==c) k++;
       else if(k) buf[i-k]=buf[i];
    }
    while(buf[i++] != '\0');
}

bool Nstrereg(char *buf1, char *buf2) // buf1에 buf2가 포함 되어 있는지 검사
{
    int i1=0, i2=0;
    while(buf1[i1]!='\0')
   {
       if(buf1[i1]==buf2[i2]) { if(buf2[++i2]=='\0') return  1;  }
       else  i2=0;
       i1++; 
   } 
   return  0;
}

char *Nstrchr(char *buf, char c) //buf에서 문자 c의 첫번째 위치를 찾는다.
{
     int i;
     while(buf[i]!='\0')
     {
         if(buf[i]==c) return  &buf[i];
         i++; 
     }
     return  0;
}

char *Nstrchrb(char *buf, char c) //buf에서 문자 c의 마지막 위치를 찾는다.
{
  int i; char *rc=0;
  while(buf[i]!='\0') { if(buf[i]==c) rc=&buf[i]; i++;  }
  return  rc;
}

int Nstrcmp(char *buf1, char *buf2) //buf1과 buf2를 비교
{
    int i=0;
   do
   {
       if(buf1[i]!=buf2[i])  return (buf1[i] < buf2[i]) ? -1: 1; 
   }
   while(buf1[i++]!='\0');
   return  0;
}

int Nstricmp(char *buf1, char *buf2) //buf1과 buf2를 대소 문자 구별하지 않고 비교
{
    int i=0;
   do
   {
       if((buf1[i]>0x40)&&(buf1[i]<0x5b)) buf1[i]+=0x20;
       if((buf2[i]>0x40)&&(buf2[i]<0x5b)) buf1[i]+=0x20;
       if(buf1[i]!=buf2[i])  return (buf1[i] < buf2[i]) ? -1: 1;
  }
  while(buf1[i++]!='\0');
  return  0;
}

int Nstrreplace(char *buf, char *buf1, char *buf2) //buf에 있는 문자 buf1을 buf2로 교체
{
     int i=0, i1=0, i2=0, k=0, t, ia=0;
     while(buf[ia]!='\0') ia++;
     while(buf1[i1]!='\0') i1++;
     while(buf2[i2]!='\0') i2++;
     while(buf[i]!='\0')
    {
        if(buf[i]==buf1[k])
       {
           if(buf1[++k]=='\0')
          {
              if(i1<i2)
             {
                 k=i2-i1; t=ia;
                 while(t>i) {  buf[t+k]=buf[t]; t--; }
             }
             else if(i1>i2)
             {
                 k=i1-i2; t=i;
                do { buf[t-k]=buf[t];  } while(buf[t++]!='\0');
             }
             k=0; t=i-i1+1; 
             while(k<i2)
            {   
                  buf[t]=buf2[k]; t++; k++;
           }
           k=0;
        }
     }
     else  k=0;
     i++;
  }
  return  0;
}