菜鸟学习历程【8】 string相关库函数的自我实现

来源:互联网 发布:白额高脚蛛淘宝 编辑:程序博客网 时间:2024/06/06 20:15
string相关库函数的自我实现
一、strcpy函数

格式:strcpy(cahr *str, char *ptr);
功能:将ptr 指向的字符串内容覆盖到str所指向的字符串中,注意说的是覆盖,如果str长于ptr,使用该函数会完全覆盖str的内容。
#include <stdio.h>char *my_strcpy(char *s1, char *p1){char *tmp = s1;while((*s1++ = *p1++)!= '\0');return tmp;}
说明:形参为两个字符串的地址,将p1所指向的内容复制给s1时,也对这两个地址进行操作,当p1为‘\0’时,会停止运算,并返回s1字符串所指向字符串的首地址,tmp就是存放这个地址而定义的。

二、strcnpy函数

格式:strncpy(char *str,cahr * ptr,int n);
功能:指定将ptr指向的字符串的前n个字节,复制到str指向的字符串中;此时,如果str指向的字符串长于ptr所指向的字符串,也不会覆盖后面内容。
#include <stdio.h>char *my_strncpy(char *s1, char *p1, int num){int i = 0;char *tmp = s1;for(i = 0;i < num;i++){*(s1+i) = *(p1+i); }return tmp;}
说明:我们只需要指定循环的次数等同于指定复制的n的字节数,就可以完成这样的功能;

三、strcmp函数

格式:strcmp(char *str, char *ptr);
功能:比较两个字符串的大小,一位一位的比较,当第一位相同时,比较第二位....最终结果有三种,当str > ptr时,返回值大于零、当str < ptr 时,返回值小于零、当str == ptr时,返回值等于零;
#include <stdio.h>int my_strcmp(char *s1, char *p1){while(*s1 != '\0'|| *p1 != '\0'){if(*s1 > *p1)return 1;else if(*s1 < *p1)return -1;else{p1++;s1++;}}if(*p1 == '\0' && *s1 == '\0')return 0;}
说明:循环的总次数应该等同于最长字符串的长度,原因是避免两个字符串前n-1为相同,而最后一位不同,这种情况无返回值。

四、strncmp函数

格式:strncmp(char *str,char * ptr ,int n)
功能:比较str与ptr的前n个字节是否相同,若str与ptr的前n个字符相同,则返回0;若str大于ptr,则返回大于0的值;若str 若小于ptr,则返回小于0的值。
#include <stdio.h>int my_strncmp(char *s1, char *p1, int length){int count = 0;int len = length;while(length-- != 0)  {                      if(*s1 > *p1)return 1;else if(*s1 < *p1)return -1;else{p1++;s1++;count++;}}if(count == len)return 0;}
说明:通过length来控制循环次数,逐字节比较大小,定义count记录相同的次数,当count的值等于length时,说明两个字符串比较内容相等。

五、strlen函数

格式:strlen(char *str)
功能:统计字符串str的长度,不包括‘\0’
#include <stdio.h>int my_strlen(char *s1){int count = 0;while(*s1++ != '\0'){count++;}return count;}
说明:利用字符串尾为‘\0’的特点,提供循环依据,定义count记录循环的次数,最终返回字符串的长度。





















原创粉丝点击