- memcmp ( ) /* -- C语言库函数源代码 - */
- /*
- Compares count bytes of memory starting at buffer1 and buffer2 and find if equal or which one is first in lexical order.
- 比较内存区域buffer1和buffer2的前count个字节。当buffer1 < buffer2时,返回值 < 0;当buffer1 = buffer2时,返回值 0;当buffer1 > buffer2时,返回值 > 0。
- */
- int my_memcmp(const void *buffer1,const void *buffer2,int count)
- {
- if (!count)
- return(0);
- while ( --count && *(char *)buffer1 == *(char *)buffer2)
- {
- buffer1 = (char *)buffer1 + 1;
- buffer2 = (char *)buffer2 + 1;
- }
- return( *((unsigned char *)buffer1) - *((unsigned char *)buffer2) );
- }
- void Print(char * str1,char *str2,int t)
- {
- if(t > 0)
- printf("n%s Upper Than %sn",str1,str2);
- else if(t < 0)
- printf("n%s Lower Than %sn",str1,str2);
- else
- printf("n%s Equal %sn",str1,str2);
-
- }
- int main()
- {
- char *str1= "ammana";
- char *str2 = "babi";
- Print(str1,str2,my_memcmp(str1,str2,3));
- Print(str2,str1,my_memcmp(str2,str1,3));
- Print(str2,str2,my_memcmp(str2,str2,3));
-
- system("pause");
- return 0;
- }
- memchr ( )/* -- C语言库函数源代码 - */
- #include
- /*
- Searches at bufferfor the given character, stopping when characteris first found or cnt bytes have been searched through.
- 从buffer所指内存区域的前count个字节查找字符ch,当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL。
- */
- void * my_memchr(const void * buffer,int ch,int count)
- {
- while ( count && (*(unsigned char *)buffer != (unsigned char)ch) )
- {
- buffer = (unsigned char *)buffer + 1;
- count--;
- }
- return(count ? (void *)buffer : NULL);
- }
- int main()
- {
- char *str = "ammana_babi";
- char * p;
- char ch;
-
- ch = '9';
- p = (char *)my_memchr(str,ch,strlen(str)+1);
- if(p == NULL)
- printf("Can't find the character %c !n",ch);
- else
- printf("Find the character %c !n",*p);
-
- ch = 'b';
- p = (char *)my_memchr(str,ch,strlen(str)+1);
- if(p == NULL)
- printf("Can't find the character %c !n",ch);
- else
- printf("Find the character %c !n",*p);
- system("pause");
- return 0;
- }
- memccpy ( ) /* -- C语言库函数源代码 - */
- #include
- /*
- Copies bytes from src to dest until count bytes have been copied,or up to and including the character c, whichever comes first.
- 如果src前n个字节中存在’c’,返回指向字符’c’后的第一个字符的指针;否则返回NULL,src被复制。
- */
- void * my_memccpy(void *dest,const void *src,int c,int count)
- {
- while ( count && (*((char *)(dest = (char *)dest + 1) - 1) =
- *((char *)(src = (char *)src + 1) - 1)) != (char)c )
- count--;
- return(count ? dest : NULL);
- }
- /*这个函数的while条件判断写的比较长,看的眼疼,等价与以下写法:*/
- void * my_memccpy01(void *dst,const void *src,int c,int count)
- {
- while (count)
- {
- *(char *)dst = *(char *)src;
- dst = (char *)dst + 1;
- if(*(char *)src == (char) c)
- break;
- src = (char *)src + 1;
- count--;
- }
- return(count ? dst : NULL);
- }
- int main()
- {
- char a[12];
- char * p;
- char * str ="ammana_babi";
- char ch;
-
- ch = '9';
- p = (char *)my_memccpy01(a,str,ch,strlen(str)+1);
- if(p == NULL)
- printf("nCan't not find character. n");
- else
- {
- printf("nFind the character! n");
- *p= '\0';
- }
- printf("nThe String which has been copied is:t");
- puts(a);
-
- printf("************************************");
- ch = 'b';
- p = (char *)my_memccpy01(a,str,ch,strlen(str)+1);
- if(p == NULL)
- printf("nCan't not find character. n");
- else
- {
- printf("nFind the character! n");
- *p = '\0';
- }
- printf("nThe String which has been copied is:t");
- puts(a);
-
- system("pause");
- return 0;
- }
- memmove ( ) /* -- C语言库函数源代码 - */
- /*
- memmove() copies a source memory buffer to a destination memory buffer.This routine recognize overlapping buffers to avoid propogation.For cases where propagation is not a problem, memcpy() can be used.
- memmove()由src所指定的内存区域赋值count个字符到dst所指定的内存区域。src和dst所指内存区域可以重叠,但复制后src的内容会被更改。函数返回指向dst的指针。
- */
- void * my_memmove(void * dst,const void * src,int count)
- {
- void * ret = dst;
- if (dst <= src || (char *)dst >= ((char *)src + count))
- {
- while (count--)
- {
- *(char *)dst = *(char *)src;
- dst = (char *)dst + 1;
- src = (char *)src + 1;
- }
- }
- else
- {
- dst = (char *)dst + count - 1;
- src = (char *)src + count - 1;
- while (count--)
- {
- *(char *)dst = *(char *)src;
- dst = (char *)dst - 1;
- src = (char *)src - 1;
- }
- }
- return(ret);
- }
- int main()
- {
- char a[12];
- puts((char *)my_memmove(a,"ammana_babi",16));
- system("pause");
- return 0;
- }
- memcpy ( ) /* -- C语言库函数源代码 - */
- /*
- memcpy() copies a source memory buffer to a destination memory buffer. This routine does NOT recognize overlapping buffers, and thus can lead to propogation.For cases where propagation must be avoided, memmove() must be used.
- memcpy()由src指定内存区域拷贝count个字符到dst所指定的内存区域。src和dst内存区域不能重叠,函数返回指向dst的指针。
- */
- void * my_memcpy(void *dst,const void *src,int count)
- {
- void * ret = dst;
- while (count--)
- {
- *(char *)dst = *(char *)src;
- dst = (char *)dst + 1;
- src = (char *)src + 1;
- }
- return(ret);
- }
- int main()
- {
- char a[12];
- puts((char *)my_memcpy(a,"ammana_babi",16));
- system("pause");
- return 0;
- }
- strnicmp ( ) /* -- C语言库函数源代码 - */
- /*
- Compare the two strings for lexical order. Stops the comparison when the
- following occurs: (1) strings differ, (2) the end of the strings is reached,
- or (3) count characters have been compared. For the purposes of the comparison,
- upper case characters are converted to lower case.
- 字符串比较函数,比较字符串src和dst的前count个字符,但是不区分大小写,大写字母
- 会被转换为小写字母来进行比较。如:"abc_" < "ABCD" ,因为 "_" < "d"。当源字符串
- 大于目标字符串的时候,返回>0;当源字符串等于目标字符串的时候,返回=0。当源字符串
- 小于目标字符串的时候,返回<0;
- */
- int my_strnicmp(const char *dst,const char *src,int count)
- {
- int ch1, ch2;
- do
- {
- if ( ((ch1 = (unsigned char)(*(dst++))) >= 'A') &&(ch1 <= 'Z') )
- ch1 += 0x20;
- if ( ((ch2 = (unsigned char)(*(src++))) >= 'A') &&(ch2 <= 'Z') )
- ch2 += 0x20;
- } while ( --count && ch1 && (ch1 == ch2) );
- return (ch1 - ch2);
- }
- void Print(char * str1,char *str2,int t,int n)
- {
- char *p;
- p = str1;
- while(*p && (p-str1) < n) printf("%c",*p),p++;
- if(t > 0)
- printf("tUpper Thant");
-
- else if(t < 0)
- printf("tLower Thant");
- else
- printf("tEqualtt");
- p = str2;
- while(*p && (p-str2) < n) printf("%c",*p),p++;
- printf("n");
- }
- #define nn 4
- int main()
- {
- char *str1= "ammana";
- char *str2 = "babi";
- char *str3 = "AMMANA";
- char *str4 = "bab_";
- Print(str1,str2,my_strnicmp(str1,str2,nn),nn);
- Print(str3,str1,my_strnicmp(str3,str1,nn),nn);
- Print(str4,str2,my_strnicmp(str3,str2,nn),nn);
-
- system("pause");
- return 0;
- }
- stricmp ( ) /* -- C语言库函数源代码 - */
- /*
- _stricmp/_strcmpi perform a case-insensitive string comparision.
- For differences, upper case letters are mapped to lower case.
- Thus, "abc_" < "ABCD" since "_" < "d".
- 字符串比较函数,比较字符串src和dst,但是不区分大小写,
- 大写字母会被转换为小写字母来进行比较。如:"abc_" < "ABCD" ,因为 "_" < "d"。
- 当源字符串大于目标字符串的时候,返回>0;当源字符串等于目标字符串的时候,返回=0。
- 当源字符串小于目标字符串的时候,返回<0;
- */
- int my_stricmp(const char *dst, const char *src)
- {
- int ch1, ch2;
- do
- {
- if ( ((ch1 = (unsigned char)(*(dst++))) >= 'A') &&(ch1 <= 'Z') )
- ch1 += 0x20;
- if ( ((ch2 = (unsigned char)(*(src++))) >= 'A') &&(ch2 <= 'Z') )
- ch2 += 0x20;
- } while ( ch1 && (ch1 == ch2) );
- return(ch1 - ch2);
- }
- void Print(char * str1,char *str2,int t)
- {
- if(t > 0)
- printf("n%s Upper Than %sn",str1,str2);
- else if(t < 0)
- printf("n%s Lower Than %sn",str1,str2);
- else
- printf("n%s Equal %sn",str1,str2);
- }
- int main()
- {
- char *str1= "ammana";
- char *str2 = "babi";
- char *str3 = "AMMANA";
- char *str4 = "bab_";
- Print(str1,str2,my_stricmp(str1,str2));
- Print(str3,str1,my_stricmp(str3,str1));
- Print(str4,str2,my_stricmp(str4,str2));
-
- system("pause");
- return 0;
- }
- strncmp ( ) /* -- C语言库函数源代码 - */
- /*
- Compares two strings for lexical order.
- The comparison stops after: (1) a difference between the strings is found, (2) the end of the strings is reached, or (3) count characters have been compared.
- 比较字符串first和last的前n个字符。first > last ,>0;first = last,=0;first < last, <0 。
- */
- int my_strncmp(const char *first,const char *last,int count)
- {
- if (!count)
- return(0);
- while (--count && *first && *first == *last)first++,last++;
- return( *(unsigned char *)first - *(unsigned char *)last );
- }
- void Print(char * str1,char *str2,int t,int n)
- {
- char *p;
- p = str1;
- while(*p && (p-str1) < n) printf("%c",*p),p++;
- if(t > 0)
- printf("tUpper Thant");
-
- else if(t < 0)
- printf("tLower Thant");
- else
- printf("tEqualtt");
- p = str2;
- while(*p && (p-str2) < n) printf("%c",*p),p++;
- printf("n");
- }
- #define nn 3
- int main()
- {
- char *str1= "ammana";
- char *str2 = "babi";
- Print(str1,str2,my_strncmp(str1,str2,nn),nn);
- Print(str2,str1,my_strncmp(str2,str1,nn),nn);
- Print(str2,str2,my_strncmp(str2,str2,nn),nn);
-
- system("pause");
- return 0;
- }
- strcmp ( ) /* -- C语言库函数源代码 - */
- /*
- STRCMP compares two strings and returns an integer
- to indicate whether the first is less than the second,
- the two are equal, or whether the first is greater than the second.
- Comparison is done byte by byte on an UNSIGNED basis,
- which is to say that Null (0) is less than any other character (1-255).
- 字符串比较函数,比较字符串source和dest。当源字符串大于目标字符串的时候,返回1;
- 当源字符串等于目标字符串的时候,返回0。当源字符串小于目标字符串的时候,返回-1;
- */
- int my_strcmp(const char *source,const char *dest)
- {
- int ret = 0 ;
- while( ! (ret = *( unsigned char *)source - *(unsigned char *)dest) && *dest)
- source++, dest++;
- if ( ret < 0 )
- ret = -1 ;
- else if ( ret > 0 )
- ret = 1 ;
- return(ret);
- }
- void Print(char * str1,char *str2,int t)
- {
- if(t == 0)
- printf("n%s Equal %sn",str1,str2);
- else if(t == 1)
- printf("n%s Upper Than %sn",str1,str2);
- else if(t == -1)
- printf("n%s Lower Than %sn",str1,str2);
- }
- int main()
- {
- char *str1= "ammana";
- char *str2 = "babi";
- Print(str1,str2,my_strcmp(str1,str2));
- Print(str2,str1,my_strcmp(str2,str1));
- Print(str2,str2,my_strcmp(str2,str2));
-
- system("pause");
- return 0;
- }
- strncpy ( )/* -- C语言库函数源代码 - */
- /*
- Copies count characters from the source string to the destination.
- If count is less than the length of source,NO NULL CHARACTER is put
- onto the end of the copied string.If count is greater than the length
- of sources, dest is padded with null characters to length count.
- 把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。
- 如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束;
- 如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
- src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
- 返回指向dest的指针。
- */
- char * my_strncpy( char * dest, const char * source, int count )
- {
- char *p = dest;
- while (count && (*p++ = *source++)) count--;
- while(count--)
- *p++ = '\0';
- return(dest);
- }
- int main()
- {
- char a[20];
- puts(my_strncpy(a,"ammana_babi",15));
- system("pause");
- return 0;
- }
- strncat ( )/* -- C语言库函数源代码 - */
- /*
- Appends at most count characters of the string back onto the end of front, and ALWAYS terminates with a null character.If count is greater than the length of back, the length of back is used instead.(Unlike strncpy, this routine does not pad out to count characters).
- 把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
- src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
- 返回指向dest的指针。
- */
- char * my_strncat(char *dest,const char *source,int count)
- {
- char *p = dest;
- while (*p) p++;
- while (count-- && (*p++ = *source++));
- *p = '\0';
- return(dest);
- }
- int main()
- {
- char a[20] = "ammana_";
- puts(my_strncat(a,"babi",10));
- system("pause");
- return 0;
- }
- strcat ( )/* -- C语言库函数源代码 - */
- /*
- Concatenates src onto the end of dest.
- Assumes enough space in dest.
- 目标指针空间必须有足够的存储空间。
- */
- char * my_strcat ( char * dst, const char * src )
- {
- char * p = dst;
- while( *p ) p++;
- while( *p++ = *src++ ) ;
- return( dst );
- }//字符串的连接
- /*当然也可以用下面这种方式:*/
- char * my_strcat_01(char * dst,char * src)
- {
- char * p = dst + strlen(dst);
- strcpy(p,src);
- return dst;
- }
- int main()
- {
- char str1[] = "ammana_";
- char *str2 = "babi";
- puts(my_strcat(str1,str2));
- system("pause");
- return 0;
- }
- strlen ( )/* -- C语言库函数源代码 - */
- /*
- 得到字符串长度。(不含结束符 ‘\0’)
- */
- int my_strlen(const char * str )
- {
- const char *p = str;
- while( *p++ ) ;
- return( (int)(p - str - 1) );
- }
- /*当然也可以采用下面的写法。*/
- int my_strlen_01 ( const char * str )
- {
- const char *p = str;
- while( *p ) p++;
- return( (int)(p - str) );
- }
- int main()
- {
- char *str = "ammana_babi";
- printf("%dn",my_strlen(str));
- printf("%dn",my_strlen_01(str));
- system("pause");
- }
- strcpy ( )/* -- C语言库函数源代码 - */
- /*
- 下面是strcpy库函数的实现,因为库函数讲究的就是精练、简洁。所以没有其他的异常处理代码。主要的异常处理还是交给了函数的使用者,在调用前请确认目的和源指针是否都存在(不能为Null),请确认目标指针空间是否大于源字符串的空间。
- Copies the string src into the spot specified by dest;
- assumes enough room.
- 目标指针空间必须大于源字符串空间。
- */
- char * my_strcpy(char * dst, const char * src)
- {
- char * cp = dst;
- while( *cp++ = *src++ ) ;
- return( dst );
- }
- int main()
- {
- char a[12];
- puts(my_strcpy(a,"ammana_babi"));
- system("pause");
- return 0;
- }
复制代码
评分
-
查看全部评分
|
|
|
|
|