【字符操作函数】
1.strstr()函数用来检索子串在字符串中首次出现的位置,其原型为: char *strstr( const char *dest,const char * src );【参数说明】dest为要检索的字符串,src为要检索的子串。 【返回值】返回字符串str中第一次出现子串src的地址;如果没有检索到子串,则返回NULL。
【函数实现】
#includechar* my_strstr(const char *dest,const char *str){ char *ptr=(char *)dest; char *p1=NULL; char *p2=NULL; while (*ptr) { p1=ptr; p2=(char *)str; while (*p1==*p2) { p1++; p2++; if (*p2=='\0') { return ptr; } } ptr++; } return NULL;}
结果:
2.strcat()函数用来连接字符串,其原型为:
char *strcat(char *dest ,const char *src)
【参数】dest 为目的字符串指针,src 为源字符串指针。
strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。 【返回值】返回dest 字符串起始地址。【函数实现】
#include#include #define MAXLINE 100char* my_strcat(char *dest,const char *src){ char *pstr=dest; assert(dest); assert(src); while (*dest) { dest++; } while (*dest++=*src++) { ; } return pstr;}int main(){ char arr[MAXLINE]="abcd"; char *p="efgh"; char *ret=my_strcat(arr,p); printf("%s\n",ret); return 0;}
结果:
3.strcmp()函数用来比较字符串大小,其原型为:
int strcmp( const char *dest, const char *src)
【参数】dest,src为需要比较的两个字符串。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将dest 第一个字符值减去src 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。 【返回值】若参数dest 和src 字符串相同则返回0。dest 若大于src从则返回大于0 的值。dest 若小于src则返回小于0 的值。注意:strcmp() 以二进制的方式进行比较【函数实现】
#include#include int my_strcmp(const char *str1,const char *str2){ assert(str1); assert(str2); while (*str1 == *str2) { if (*str1 == '\0') { return 0; } str1++; str2++; } return (*str1 - *str2);}int main(){ char *str1="abcde"; char *str2="abcfe"; int ret = my_strcmp(str1,str2); if (ret > 0) { printf("str1 > str2\n"); } else if(ret < 0) { printf("str1 < str2\n"); } else printf("str1 =str2\n"); return 0;}
结果:
4.strlen()函数用来计算字符串长度,其原型为:
size_t strlen( const char *string );
【参数说明】string为指定的字符串。
strlen()用来计算指定的字符串string 的长度,不包括结束字符"\0"。 【返回值】返回字符串string 的字符数。【注意】 strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。
【函数实现】
/**计数器方法实现*/#include#include int my_strlen(const char *str){ int count=0; assert(str);//断言 while (*str) { count++; str++; } return count;}int main(){ char arr[]="abcde"; int ret=my_strlen(arr); printf("%d\n",ret); return 0;}/***递归方法实现*/#include #include int my_strlen(const char *str){ assert(str); if (*str=='\0') { return 0; } else { return (1+my_strlen(str+1)); }}int main(){ char arr[] = "abcde"; int ret = my_strlen(arr); printf("%d\n",ret); return 0;}/***指针方式实现*/#include int my_strlen(const char *str){ const char *p=str; while (*str) { str++; } return str-p;}int main(){ char arr[]="abcde"; int ret=my_strlen(arr); printf("%d\n",ret); return 0;}
结果:
5.strcpy()函数,函数原型
char *strcpy(char *dest, const char *src);
【函数说明】:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。 【返回值】:返回参数dest 的字符串起始地址。【函数实现】
#include#include #define MAX 20void my_strcpy(char *dest,char *str){ assert(dest); assert(str); while (*dest++=*str++);}int main(){ char arr[MAX]={0}; char *ps="abcde"; my_strcpy(arr,ps); printf("%s\n",arr); return 0;}
结果:
注意:为什么结果是abcde呢?后面的0怎么没有打印出来,因为字符串是以‘\0’作为结束标志的,而‘\0’的对应的ASCII码值正好是0,所以就自然而然的结果是abcde了!