标签:字符串操作函数
【字符操作函数】
1.strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
char *strstr( const char *dest,const char * src );
【参数说明】dest为要检索的字符串,src为要检索的子串。
【返回值】返回字符串str中第一次出现子串src的地址;如果没有检索到子串,则返回NULL。
【函数实现】
#include <stdio.h> char* 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 <stdio.h> #include <assert.h> #define MAXLINE 100 char* 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 <stdio.h> #include <assert.h> 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 <stdio.h> #include <assert.h> 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 <stdio.h> #include <assert.h> 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 <stdio.h> 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 <stdio.h> #include <assert.h> #define MAX 20 void 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了!
本文出自 “Pzd流川枫” 博客,请务必保留此出处http://xujiafan.blog.51cto.com/10778767/1718912
标签:字符串操作函数
原文地址:http://xujiafan.blog.51cto.com/10778767/1718912