常見的幾個小筆試題

原型:extern   void   *memcpy(void   *dest,   void   *src,   unsigned   int   count);     
功能:由src所指內存區域複製count個字節到dest所指內存區域。         
說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針。  

typedef   unsigned   char   BYTE;
void* memcpy(void* pDest, const void* pSrc, unsigned int size) {
	assert(pDest != NULL && pSrc != NULL);
	BYTE* pTmpD = (BYTE*) pDest;
	const BYTE* pTmpS = (BYTE*) pSrc;
	//要考慮內存區域重疊
	//dst<src 前複製; dst>src 後複製
	if(pTmpD < pTmS){
		while (size--) {
			*pTmpD++ = *pTmpS++;
		}
	}else{
		pTmpD += (size-1);
		pTmpS += (size-1);
		while(size--){
			*pTmpD-- = *pTmpS--;
		}
	}
	return pDest;
}


二、char *strcpy(char *strDest, const char *strSrc)字符串複製函數


char *strcpy(char *strDest, const char *strSrc);
{
    assert((strDest!=NULL) && (strSrc !=NULL));   // 2分
    char *address = strDest;                     // 2分
    while( (*strDest++ = * strSrc++) != ‘\0’ );   // 2分
    return address ;                           // 2分
}
const char *strSrc中的const是指字符串內容爲const,而不是說strSrc是const的,如果要指定strSrc是const,應該寫成 char * const strSrc 。 三、int Strcmp(char *str1, char *str2)字符串比較函數

int Strcmp(char *str1, char *str2)
{
   int i=0;
   int b=0;
   while(str1[i]||str2[i])
   {
      if(str1[i]>str2[i])
      {
         b=1;break;
      }
      else if(str1[i]<str2[i])
      {
         b=-1;break;
      }
      i++;
   }
   return b;
}
 
當只要求判斷是否相等時,可簡化爲:

int strcmp(char *source, char *dest)
{
  while ( (*source != '\0') && (*source == *dest))
    {
    source++;
    dest++;
     }
     return ( (*source) - (*dest) ) ? -1 : 0;
}
四、int strlen(const char* str)計算字符串長度

int strlen(const char* str)
{
   assert(str != NULL);
   int len = 0;
   while (*str++!='\0') 
      len++;
   return len;
}
 
五、void reverse(char *ch)字符串反轉函數

void reverse_str(char *ch)
{ 
    int len;
    int i; 
    len = strlen(ch)-1;
    char ctemp;
    for(i = 0; i < len-i; i++)
    {
        ctemp = ch[i]; 
        ch[i] = ch[len-i];
        ch[len-i] = ctemp;
    }
    ch[len+1] = 0;
}

void reverse_str2(char *ch)
{  
  int len;
   int i;
   len = strlen(ch)-1;
   for(i = 0; i < len-i; i++)
   {
      ch[i] = ch[i] ^ ch[len-i];
        ch[len-i] = ch[len-i] ^ ch[i];
        ch[i] = ch[i] ^ ch[len-i];
    }
    ch[len+1] = 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章