实现一些自己的simple string(s trcat strcmp strncmp strlen strcpy strncpy memcpy)
2014-03-21 14:34
441 查看
#include<stdio.h>
#include<assert.h>
#include<string.h>
typedef unsigned int size_t;
int strnCmp(const char * s1, const char *s2 , size_t count)
{
if(!s1 || !s2)
printf("string is null\n");
while( !(*s1-*s2) && *s1!='\0' && *s2!='\0'&& --count)
{
s1++;
s2++;
// count--;
}
if(*s1-*s2==0)
return 0;
if(*s1-*s2>0)
return 1;
else if(*s1-*s2<0)
return -1;
}
int strCmp(const char *s1,const char *s2)
{
int result;
while(1)
{
if( (result=*s1-*s2) !=0 )
return result;
if( *s1 =='\0' && *s2=='\0')
return 0;
s1++;
s2++;
}
}
size_t myStrlen(const char *s)
{
assert( s !=NULL);
int len=0;
while(*s!='\0')
{
len++;
s++;
}
return len;
}
char * myStrcpy(char *dest,const char *src)
{
assert(dest!=NULL && src!=NULL);
while( (*dest++ =*src++ )!='\0')
{
;
}
// *(dest++)='\0'; 比这种方式更好,少了分情况讨论
return dest;
}
char * myStrncpy(char *dest,const char *src, size_t n)
{
assert(dest!=NULL && src!=NULL);
while(n )
{
*dest++=*src++;
n--;
}
// *(dest++)='\0';
return dest;
}
char * myStrcat(char * dest ,const char * src)
{
assert(dest!=NULL && src!=NULL);
while( *dest !='\0')
dest ++;
while( (*dest++ = *src++)!='\0' )
;
return dest;
}
void *myMemcpy(void * dest,const void *src,size_t count)
{
assert(dest!=NULL && src!=NULL);
while(count )
{
*(char *) dest++ =*(char *)src++;
count--;
}
return dest;
}
int main()
{
char str[10];
char dest[10]="ABCDE";
char str1[10]="ABCDE";
scanf("%s",str);
/*
int a=strlen(str);
printf("the lib strlen is %d\n",a);
int b=myStrlen(str);
printf("the my strlen is %d\n\n\n",b);
printf("the original :%s\n",str);
myStrcpy(dest,str);
printf("after the my copy :%s\n",dest);
strcpy(str1,str);
printf("after the lib copy :%s\n\n\n",str1);
printf("the original :%s\n",str);
myStrncpy(dest,str,3);
printf("after the my ncopy :%s\n",dest);
strncpy(str1,str,3);
printf("after the lib ncopy :%s\n",str1);
printf("the original :%s\n",str);
myStrcat(dest,str);
printf("after the my strcat :%s\n",dest);
strcat(str1,str);
printf("after the lib strcat :%s\n",str1);
printf("the original :%s\n",str); //注意测试数据记得选择比src 大,小,相等
myMemcpy(dest,str,3);
printf("after the my memcpy :%s\n",dest);
memcpy(str1,str,3);
printf("after the lib memcpy :%s\n",str1);
*/
int a[3]={0}; //int 作为测试数据
int b[3]={0};
int i;
myMemcpy(a,str,5);
printf("after the my memcpy :\n");
for(i=0 ;i<sizeof(a);i++) //其实应该把sizeof(a)提到外面,否则性能低下,重复调用频繁
printf("%d ",* (( char *)a+i) );
printf("\n\n");
memcpy(b,str,5);
printf("after the lib memcpy :\n");
for(i=0 ;i<sizeof(b);i++)
printf("%d ", * ( ( char *)b+i) );
return 1;
}
#include<assert.h>
#include<string.h>
typedef unsigned int size_t;
int strnCmp(const char * s1, const char *s2 , size_t count)
{
if(!s1 || !s2)
printf("string is null\n");
while( !(*s1-*s2) && *s1!='\0' && *s2!='\0'&& --count)
{
s1++;
s2++;
// count--;
}
if(*s1-*s2==0)
return 0;
if(*s1-*s2>0)
return 1;
else if(*s1-*s2<0)
return -1;
}
int strCmp(const char *s1,const char *s2)
{
int result;
while(1)
{
if( (result=*s1-*s2) !=0 )
return result;
if( *s1 =='\0' && *s2=='\0')
return 0;
s1++;
s2++;
}
}
size_t myStrlen(const char *s)
{
assert( s !=NULL);
int len=0;
while(*s!='\0')
{
len++;
s++;
}
return len;
}
char * myStrcpy(char *dest,const char *src)
{
assert(dest!=NULL && src!=NULL);
while( (*dest++ =*src++ )!='\0')
{
;
}
// *(dest++)='\0'; 比这种方式更好,少了分情况讨论
return dest;
}
char * myStrncpy(char *dest,const char *src, size_t n)
{
assert(dest!=NULL && src!=NULL);
while(n )
{
*dest++=*src++;
n--;
}
// *(dest++)='\0';
return dest;
}
char * myStrcat(char * dest ,const char * src)
{
assert(dest!=NULL && src!=NULL);
while( *dest !='\0')
dest ++;
while( (*dest++ = *src++)!='\0' )
;
return dest;
}
void *myMemcpy(void * dest,const void *src,size_t count)
{
assert(dest!=NULL && src!=NULL);
while(count )
{
*(char *) dest++ =*(char *)src++;
count--;
}
return dest;
}
int main()
{
char str[10];
char dest[10]="ABCDE";
char str1[10]="ABCDE";
scanf("%s",str);
/*
int a=strlen(str);
printf("the lib strlen is %d\n",a);
int b=myStrlen(str);
printf("the my strlen is %d\n\n\n",b);
printf("the original :%s\n",str);
myStrcpy(dest,str);
printf("after the my copy :%s\n",dest);
strcpy(str1,str);
printf("after the lib copy :%s\n\n\n",str1);
printf("the original :%s\n",str);
myStrncpy(dest,str,3);
printf("after the my ncopy :%s\n",dest);
strncpy(str1,str,3);
printf("after the lib ncopy :%s\n",str1);
printf("the original :%s\n",str);
myStrcat(dest,str);
printf("after the my strcat :%s\n",dest);
strcat(str1,str);
printf("after the lib strcat :%s\n",str1);
printf("the original :%s\n",str); //注意测试数据记得选择比src 大,小,相等
myMemcpy(dest,str,3);
printf("after the my memcpy :%s\n",dest);
memcpy(str1,str,3);
printf("after the lib memcpy :%s\n",str1);
*/
int a[3]={0}; //int 作为测试数据
int b[3]={0};
int i;
myMemcpy(a,str,5);
printf("after the my memcpy :\n");
for(i=0 ;i<sizeof(a);i++) //其实应该把sizeof(a)提到外面,否则性能低下,重复调用频繁
printf("%d ",* (( char *)a+i) );
printf("\n\n");
memcpy(b,str,5);
printf("after the lib memcpy :\n");
for(i=0 ;i<sizeof(b);i++)
printf("%d ", * ( ( char *)b+i) );
return 1;
}
相关文章推荐
- 模拟实现strlen、strcpy、strcmp、strncmp等字符串函数
- 自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
- strlen(),strcpy(),strncpy(),strcat(),strncat(),strcmp(),strncmp()等函数的实现
- 自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
- 自己实现strcpy,strncpy,strncat,strcmp,strlen的功能
- 自己编写函数实现strcmp和strlen的功能。
- (C语言)自己写字符串操作函数(一)——strlen/strcpy/strcat/strcmp/strchr/strpbrk/strstr等相关函数
- 自己实现 strcmp
- 浅谈 strlen() strcpy() strcat() 自己实现代码
- 自己的实现的二叉树的一些功能
- 【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
- strcat strcpy strcmp strlen 的j简单实现
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- C语言中strlen、strcpy、strncpy、strcat、strnact、strcmp、memcpy函数的实现
- str类函数的实现0.3——strcmp/strncmp
- Strcat /Strcpy /Strcmp / Strncmp/ Strlen 函数原型
- c 重要库函数实现!strcmp strcpy strlen strstr
- c++ strncmp及strcmp实现