工作的准备:atoi,itoa,strcpy,memcpy,strcmp,二分查找,strcat

对常见的几个函数,周末没事写写,绝对是笔试面试中非频繁,前面n届学长无数次强调了,大家就别怀疑了。从今天开始,每天10道题。

         

int atoi(const char* str)

{

	if(str==NULL) return 0;

    bool sigFlag=true;

    int i=0;

	int sum=0;

while(str[i]!='\0')

{

	if(str[i]=='+')

		sigFlag=true;

	else if(str[i]=='-')

		sigFlag=false;



	else if(str[i]<='9'&&str[i]>='0')

	{

	 sum=sum*10+str[i]-'0';

	

	}

	else

	{

	 

	}

i++;

}

if(sigFlag==false)

  sum=0-sum;

return sum;





}

以上的有几个要点没注意到,一是没检测溢出,而是没处理好空格,三是诸如a34d5之类的字符串没处理好。

 

 

改进后如下:

int atoi(const char* str)  

{  

    if(str==NULL) return 0;  

    bool sigFlag=true;  

    int i=0;  

    int sum=0;  

    while(str[i]==' ') i++;





    while(str[i]!='\0')  

   {  

    if(str[i]=='+')  

        sigFlag=true;  

    else if(str[i]=='-')  

        sigFlag=false;  

  

    else if(str[i]<='9'&&str[i]>='0')  

    {  

     sum=sum*10+str[i]-'0';  

	 if((sigFlag && sum>0x80000000)||(!sigFlag && sum>0x7fffffff ))

	 {

		 sum=0;

	   break;

	 }

    }  

    else  

    {  

     break;

     

    }  

i++;  

}  

if(sigFlag==false)  

  sum=0-sum;  

return sum;  

  

  

}  



 

itoa:

char* itoa(int inputInt)

{

  



   if(inputInt<0)



   inputInt=0-inputInt;

   int num=inputInt;

   

   int i=0;

   while(inputInt/=10)

      i++;

   char* p=new char[i+2];

   int j=0;

   int tmp;



   do

   { 

    p[j++]=num%10+'0';

    num=num/10;

   }while(num);

   p[j+1]='\0';

   

   for(int k=0;k<(i+1)/2;++k)

   {

	   tmp=p[k];

	   p[k]=p[i-k];

	   p[i-k]=tmp;   

   }

delete []p;

return p;

}


strcpy:

void Strcpy(char* dstStr,const char* srcStr)

{

	if(srcStr==NULL||srcStr==NULL)return;

	while(*dstStr++=*srcStr++){}



}


memcpy:

void Memcpy(void* pmemTo,const void* pmemFro,int count)
{
 if(pmemTo==NULL||pmemFro==NULL) return; 
char* pbTo=(char*)pmemTo; 
char* pbFro=(char*)pmemFro;     
while(count)
 { 
 *pbTo++=*pbFro++;  
count--; 
}
}


 

 
  

  strCmp:

 

int strCmp(const char* dstStr,const char* srcStr)

{

	assert(dstStr!=NULL&&srcStr!=NULL);

	while(*dstStr++==*srcStr++ && *dstStr!='\0')

	

		return *dstStr-*srcStr;

   

}


 

 

 

二分查找:

 

int BinarySearch(int* arr,int n,int key)

 {

   assert(arr!=NULL);

   int left,right;

   left=0;

   right=n-1;

   int i=0;

   int iResult=-1;

   

   while(true)

   {

	   i=(right-left)/2;

     if(right-left==0)

	 {

        if(key==arr[left]) 

		{

			iResult=left;

	       

		}

		 break;

	 }

	 else if(key>arr[i])

	 {

	   left=i+1;

	 }

	 else if(key<arr[i])

	 {

	  right=i-1;

	 }

	 else

	 {

	 iResult=i;

	 break;

	 }

	 

   }

          

    return iResult;

   

 

 }

strcat:

 

 

 

char* StrCat(char* dstStr,const char* srcStr)

 {

	 char* strResult=dstStr;

   while(*dstStr++!='\0')

   {}

   dstStr--;

   while(*dstStr++=*srcStr++);

   return strResult;

 

 }



 

 

 

你可能感兴趣的:(二分查找)