본문 바로가기
카테고리 없음

문자열 함수 구현(포인터 버전)

by ByteBridge 2013. 2. 20.
반응형

#include<iostream>
using namespace std;

//문자열 길이
unsigned int MyStrLen(const char* Src);
//문자열 복사
char* MyStrCpy(char*Dest,const char* Src);
//문자열 복사 안정
char* MyStrCpy_s(char* Dest,unsigned int Size,const char* Src);
//문자열 붙히기
char* MyStrCat( char*Dest,const char* Src);
//문자열 붙히기 안정
char* MyStrCat_s(char* Dest,unsigned int Size,const char*Src);
//문자열 비교
char* MyCmp(const char*Str1,const char*Str2);

int main(void)
{

cout<<"문자열 길이 테스트 : ";
int Strlen=0;
const char *Str="abcdasdfasdfadsfa";
Strlen = MyStrLen(Str);
cout<<Strlen<<endl;
//cout<<"문자열 복사 테스트 : ";
 char Strcpy[100];
 MyStrCpy(Strcpy,"문자열 복사테스트 :서울 게임 아카데미");
 cout<<Strcpy<<endl;

 //문자열 복사 테스트 안정
 char Strcpy_s[100];//복사받을 문자열
char*StrSrc="복사테스트 안정 서울 게임 아카데미";//복사할 문자열
cout<<MyStrCpy_s(Strcpy_s,90,StrSrc)<<endl;
///문자열 붙이기
char StrDestcat[100]="문자열 붙히기 : ";
char*StrSrccat="서울게임 아카데미";
cout<<MyStrCat(StrDestcat,StrSrccat)<<endl;
//문자열 붙이기 안정
char StrDestcat_s[100]="문자열 붙히기 안정 :";
char *StrSrccat_s="서울 게임 아카데미";
cout<<MyStrCat_s(StrDestcat_s,100,StrSrccat_s)<<endl;

//문자열 비교
char *StrCmp1="서울 게임 아카데미";
char *StrCmp2="서울 게임 아카데미 23기";
cout<<"문자열 비교 : "<<MyCmp(StrCmp1,StrCmp2)<<endl;
return 0;
}

//문자열 길이
unsigned int MyStrLen(const char* Src)
{
const char* pDest=Src;
while(*pDest++ !=NULL)
pDest++;
return pDest-Src-1;
}
//문자열 복사
char* MyStrCpy(char*Dest,const char* Src)
{
 char*pDest = Dest;
while(*Src !=NULL)
{
*Dest++=*Src++;
}
*Dest='\0';
return pDest;
}
//문자열 복사 안
char* MyStrCpy_s(char* Dest,unsigned int Size,const char* Src)
{
//널 체크 
char *DestErrStr="복사될 버퍼용량이 NULL 이다.";
char *SrcErrStr="복사할 버퍼용량이 NULL 이다.";
char *SizeStr="복사하려는 문자의 크기보다 작습니다.";
//크기 체크 
if (Size<MyStrLen(Src)+1)
{
return SizeStr;
}
else if (*Dest==NULL)
{
return DestErrStr;
}
else if(*Src==NULL)
{
return SrcErrStr;
}
 char *pDest = Dest;
while(*Src !=NULL)
{
*Dest++=*Src++;
}
*Dest='\0';
return pDest;
}
//문자열 붙히기
char* MyStrCat( char*Dest,const char* Src)
{
 char* pDest=Dest;

while (*Dest!=NULL)
*Dest++;
while(*Src!=NULL)
*Dest++=*Src++;
*Dest='\0';
return pDest;
}
//문자열 붙히기 안정
char* MyStrCat_s(char* Dest,unsigned int Size,const char*Src)
{
//널 체크 
char *SizeStr="버퍼크기가 작다.";
//크기 체크 
if (Size<MyStrLen(Src)+MyStrLen(Dest)+1)
{
return SizeStr;
}
char* pDest=Dest;

while (*Dest!=NULL)

*Dest++;

while(*Src!=NULL)

*Dest++=*Src++;

*Dest='\0';
return pDest;

}
//문자열 비교
char* MyCmp(const char*Str1,const char*Str2)
{
unsigned int nStr1_Len = MyStrLen(Str1);
unsigned int nStr2_Len = MyStrLen(Str2);
char* EqualStr = "두문자열이 같습니다";
char* LeftBigStr = "왼쪽문자열이 더 큽니다.";
char* RightBigStr = "오른쪽 문자열이 더 큽니다.";

if (nStr1_Len == nStr2_Len)
{
return EqualStr;
}
else if (nStr1_Len > nStr2_Len)
{
return LeftBigStr;
}
else
return RightBigStr;
}

반응형