• 工作的准备: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]!='')
    {
    	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]!='')  
       {  
        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]='';
       
       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!='')
    	
    		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++!='')
       {}
       dstStr--;
       while(*dstStr++=*srcStr++);
       return strResult;
     
     }



  • 相关阅读:
    C#关系运算符
    C#逻辑运算符
    C#位运算符
    C#赋值运算符
    C#条件运算符(?:)
    C#自增运算符(++)
    C#自减运算符
    C# sizeof运算符
    C# checked运算符
    最大值最小值
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3299558.html
Copyright © 2020-2023  润新知