c语言字符串操作实现
2013-03-17 12:04
295 查看
复试前,用字符串相关的操作来练练手。敲一遍总该用些用处。
#include <stdio.h> #include <assert.h> #include <malloc.h> int strlen(const char *str) { assert(str!=NULL); int len = 0; while(*str++) ++len; return len; } char *strcpy(char *to, const char *from) { assert((to!=NULL)&&(from!=NULL)); char *result = to; while(*to++ = *from++); return result; } char *strncpy(char *to, const char *from, size_t count) { assert((to!=NULL)&&(from!=NULL)); char *result = to; while (count--) { if (*from) *to++=*from++; else { *to++='\0'; break; } } return result; } void *memset(void *buffer, int c, size_t count) { assert(buffer!=NULL); char *p = (char *)buffer; while(count--) *p++ = (char)c; return buffer; } char *strchr(char *str, int c) { assert(str!=NULL); for (;*str!=(char)c;++str) { if(!(*str)) return NULL; } return str; } //need to release the block by hand in your outside code char *strcat(char *strDes, const char *strSrc) { assert((strDes!=NULL)&&(strSrc!=NULL)); char *address = strDes; int len = 0; while(*strDes) { len++; strDes++; } char *strResult = (char *)malloc(len+1+strlen(strSrc)); char *strRtmp = strResult; while(*strResult++=*address++); strResult--; while(*strResult++=*strSrc++); return strRtmp; } char * strncat(char *strDes, const char *strSrc, unsigned int count) { assert((strDes!=NULL)&&(strSrc!=NULL)); char *address = strDes; while(*strDes) ++strDes; while(count--&&*strSrc) *strDes++=*strSrc++; *strDes = '\0'; return address; } char *strstr(const char *strSrc, const char *str) { assert(strSrc!=NULL&&str!=NULL); const char *s = strSrc; const char *t = str; for (;*strSrc;++strSrc) { for(s=strSrc,t=str;*t&&*s==*t;++s,++t); if(!(*t)) return (char *)strSrc; } return NULL; } //need to release the block by hand in your outside code char *strdup(char *strSrc) { if (strSrc!=NULL) { char *start = strSrc; int len = 0; while(*strSrc++) len++; char *address =(char *)malloc(len+1); assert(address!=NULL); while((*address++=*start++)); return address-(len+1); } return NULL; } void *memcpy(void *to, const void *from, size_t count) { assert((to!=NULL)&&(from!=NULL)); void *result = to; char *pto = (char *)to; char *pfrom = (char *)from; while(count--) *pto++=*pfrom++; return result; } void *memmove(void *to, const void *from, size_t count) { assert((to!=NULL)&&(from!=NULL)); void *result = to; char *pto = (char *)to; char *pfrom = (char *)from; assert(pto<pfrom||pto>pfrom+count-1); if(pto<pfrom||pto>pfrom+count-1) while(count--) *pto++ = *pfrom++; else { pto = pto+count-1; pfrom = pfrom+count-1; while(count--) *pto-- = *pfrom--; } return result; } int strcmp(const char *s, const char *t) { assert(s!=NULL&&t!=NULL); while(*s&&*t&&*s==*t) { ++s;++t; } return (*s-*t); } int stricmp(const char *dst, const char *src) { assert(dst!=NULL&&src!=NULL); int ch1, ch2; while (*dst&&*src) { if((ch1=(int)*dst)>='A'&&(ch1<='Z')) ch1+=0x20; if((ch2=(int)*src)>='A'&&(ch2<='Z')) ch2+=0x20; if(ch1==ch2) { ++dst;++src; } else break; } return (ch1-ch2); } int strncmp(const char *s, const char *t, unsigned int count) { assert((s!=NULL)&&(t!=NULL)); while (*s&&*t&&*s==*t&&count--) { ++s;++t; } return (*s-*t); }
相关文章推荐
- C语言中常用的字符串操作(子串分割、替换、去前后空格、递归实现字符串反转)
- C语言模拟实现字符串操作函数
- 【C语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。
- c语言实现字符串的各种操作
- 常见的字符串操作(C语言实现)
- C语言字符串操作函数实现
- C语言字符串操作函数及常用的实现
- 自己编写c语言实现的字符串操作函数
- 【转】字符串操作函数 C语言实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- C语言实现字符串的操作
- C语言字符串的常见特殊操作(除了string.c实现的那些接口)
- c语言自定义方法实现字符串的7个操作
- C语言字符串的常见特殊操作(除了string.c实现的那些接口)
- C语言字符串的常见特殊操作(除了string.c实现的那些接口)
- 字符串的基本操作,c语言实现
- 如何手动实现C语言中的字符串操作
- 【c语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
- C语言 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
- 如何手动实现C语言中的字符串操作
- 如何手动实现C语言中的字符串操作