문자열 의 일부 라 이브 러 리 함수 구현

2452 단어 문자열
July http://hi.csdn.net/v_JULY_v 의 영향 을 받 아 C + + 를 배 울 때 라 이브 러 리 함수 의 실현 원 리 를 알 아야 합 니 다.
그래서 strcmp 와 유사 한 몇 가지 함 수 를 실현 했다.
잠재 적 인 bug 가 있 을 수 있 습 니 다. 다른 함수 의 실현 을 계속 보완 하고 추가 할 것 입 니 다.
 //         
int mystrstr1(const char* string,const char* substring)
{
	if(string==NULL||substring==NULL)return -1;

	int s1=strlen(string);
	int s2=strlen(substring);

	if(s1<s2)return-1;

	const char* temp=substring;

	while(*string!='\0')      //        
	{
		if(*string==*substring)	  //      
		{
			while(*substring!='\0')		 //              
			{
				if(*(string++)!=*(substring++))		 //        ,         
				{
					substring=temp;
					--string;
					break;
				}
				
				if(*substring=='\0')return 1;     //    
			}
		}
		else
		{
			++string;
		}
	}

	return -1;
}

//       
char* mystrcpy(char* DestStr,const char* SrcStr)    //       const
{
	if(DestStr==SrcStr)return DestStr;			  //    
	assert((DestStr!=NULL)&&(SrcStr!=NULL));	 

	char* tempStr=DestStr;

	while((*(DestStr++)=*(SrcStr++))!='\0');	//    ,  '\0'  

	return tempStr;							 //      ,      
}

//                    。   dsfsdfghyjkoooi,     g。
char findDestChar(const char* str)
{
	int hashTable[256]={0};	   //      byte,        256 

	const char* temp=str;
	while(*str!='\0')
	{
		hashTable[*str]++;
		str++;
	}
	while(*temp!='\0')
	{
		if(hashTable[*temp]==1)return *temp;
		temp++;
	}

	return '\0';
}

//       
int mystrcmp(const char* str1,const char* str2)
{
	assert(str1!=NULL&&str2!=NULL);

	while(*str1&&*str2&&*str1==*str2)
	{
		++str1;
		++str2;
	}
	if(!(*str1)||!(*str2))return 0;
	return (*str1-*str2);
}

//     
char* mystrcat(char* destStr,const char* srcStr)	 //               ?
{
	assert(destStr!=NULL&&srcStr!=NULL);

	char* temp=destStr;

	while(*destStr!='\0'){++destStr;   }

	while((*destStr++ = *srcStr++)!='\0');

	return temp;
} 

//       
int mystrlen(const char* str)
{
	assert(str!=NULL);

	int count=0;
	while(*str++!='\0')
	{
		count++;
	}
	return count;
}

오래 배 울 수록 자신 이 모 르 는 것 이 많다 는 것 을 알 게 된다.이른바 학술 이란 끝 이 없고, 오직 영원히 멈 추 지 않 는 다.
내 글 의 또 다른 버 전: http://moxiaomomo.iteye.com/blog/1052815

좋은 웹페이지 즐겨찾기