字符串操作的一系列函数
从面试到现在,字符串操作的库函数实现一直都在考。。从百度到小公司。字符串拷贝、翻转、求长度……
笔试期间无心整理,终于有时间好好实现一下了。
// 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;
}
浙公网安备 33010602011771号