字符串操作的一系列函数

从面试到现在,字符串操作的库函数实现一直都在考。。从百度到小公司。字符串拷贝、翻转、求长度……

笔试期间无心整理,终于有时间好好实现一下了。

// StrOperation.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<stdio.h>
char *strcpy(char *strDest,const char *strSource)
{
 assert(strDest!=NULL&&strSource!=NULL);
 char *str=strDest;
 while(*strSource)
  *strDest++=*strSource++;
 *strDest='\0';
 return str;
}
char *strncpy(char *strDest,const char *strSource,int n)
{
 assert(strDest!=NULL&&strSource!=NULL);
 char *start=strDest;
 while(*strSource&&n>0)
  *strDest++=*strSource++;
 if(n)
 {
  while(--n)
   *strDest++='\0';
 }
 return start;
}

//字符串连接
char* Mystrcat(char* dst, const char* src)

{

       assert(dst != NULL && src!=NULL);

       char* pTemp = dst;

       while(*dst!='\0')
           dst++;
       // dst--;

       //while((*dst++ = *src++) != '\0');
 
    while(*src)
     *dst++=*src++;
    *dst='\0';
       return pTemp;

}

//字符串翻转的实现,不使用库函数,只用指针

char* reverse(char *string)
{
 assert(string!=NULL);
 char *start=string;
 char *left=string;
 char ch;
 while(*string)
  string++;
 --string;
 while(left<string)
 {
  ch=*left;
  *left=*string;
  *string=ch;
  left++;
  string--;
 }
    return start;
}

//使用指针实现字符串左移,不使用库函数
char *LeftMove(char *src,int n)
{
 assert(src!=NULL);
 char *start=src,*left=src;
 char *tmp,*ltmp;
  int i=0;
  tmp=(char *)malloc(sizeof(char)*n);
  ltmp=tmp;
 while(i<n)
 {
  *tmp++=*src++;
  i++;
 }
 while(*src)
  *left++=*src++;
 while(ltmp<tmp)
  *left++=*ltmp++;
 return start;

}

//使用指针实现字符串右移n个字符,不使用库函数
char *rightMove(char *src,int n)
{
 assert(src!=NULL);
 char *start=src,*left=src;
 char *tmp,*ltmp;
  int len=0,i=0;
  tmp=(char *)malloc(sizeof(char)*n);
  ltmp=tmp;
     while( src[len]!='\0' )
   len++;
 while(i<len-n)
 {
  *tmp++=*src++;
  i++;
 }
 while(*src)
  *left++=*src++;
 while(ltmp<tmp)
  *left++=*ltmp++;
 return start;

}
int _tmain(int argc, _TCHAR* argv[])
{
    const char *source="Hello";
 //char *dest;
 char dest[20]="world";
 //if((dest=(char *)malloc(sizeof(char)*20))==NULL)
  //return -1;
 //dest="World";
 //strcpy(dest,source);
 //printf("%s\n",dest);
 //dest=strncpy(dest,source,3);
 // Mystrcat(dest,source);
 //reverse(dest);
  printf("%s\n",dest);
 rightMove(dest,5);
    printf("%s\n",dest);
 
 
 return 0;
}

 

posted @ 2013-10-04 11:27  sumile  阅读(166)  评论(0)    收藏  举报