바람이 머문 언덕
c의 문자열 관련 함수 흉내내기 본문
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;
}