字符串函数之strlen() , strcpy() 的模拟实现

1. strlen()函数

strlen()函数用于统计字符串的长度。直到碰到第一个字符串结束符’\0’为止。

利用库函数实现
这里写图片描述

接下来我们来模拟实现一下strlen()函数

这里写图片描述

2. strcpy()函数

作用:把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间。

利用库函数实现
这里写图片描述

接下来我们自己模拟实现该函数的功能

这里写图片描述

其中,用 char * 作为函数返回值类型,是方便实现链式访问。

3. strcat()函数

strcat() 函数用来连接字符串,其原型为:

char *strcat(char *dest, const char *src);

【参数】dest 为目的字符串指针,src 为源字符串指针。

【功能】strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。

注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

【返回值】返回dest 字符串起始地址。

实例: 连接字符串并输出

#include <stdio.h>
#include <string.h>

int main ()
{
    char str[80];
    strcpy (str,"these ");
    strcat (str,"strings ");
    strcat (str,"are ");
    strcat (str,"concatenated.");
    puts (str);
    return 0;
}

输出结果:
这里写图片描述

4. strcmp()函数

strcmp() 用来比较字符串(区分大小写),其原型为:

int strcmp(const char *s1, const char *s2);

【参数】s1, s2 为需要比较的两个字符串。

字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串”Ac”和”ba”比较则会返回字符”A”(65)和’b’(98)的差值(-33)。

【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。

实例:对 4 组字符串进行比较

#include<stdio.h>
#include <string.h>

int main()
{
    char *a = "aBcDeF";
    char *b = "AbCdEf";
    char *c = "aacdef";
    char *d = "aBcDeF";
    printf("strcmp(a, b) : %d\n", strcmp(a, b));
    printf("strcmp(a, c) : %d\n", strcmp(a, c));
    printf("strcmp(a, d) : %d\n", strcmp(a, d));
}

输出结果:
这里写图片描述

在liunx系统下对该源程序进行编译链接,输出结果为

这里写图片描述

对比两者所得结果可知:
<1>.当两个字符串不相等时,C标准没有规定返回值会是1 或 -1,只规定了正数和负数。有些实现会返回1或-1。
<2>.有些会把两个字符的ASCII码之差作为比较结果由函数值返回。但无论如何不能以此条依据作为程序中的流程逻辑。

5. strstr()函数

strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
char strstr( char *str, char substr );

【参数】str为要检索的字符串,substr为要检索的子串。

【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。

注意:查找时区分大小写。

#include<stdio.h>
#include<string.h>
int main()
{
    char *str ="The road is tortuous,but the future is bright";
    char *substr = "the";
    char *s = strstr(str, substr);
    printf("%s\n", s);
    return 0;
}

输出结果为:
这里写图片描述

6.strchr()函数

strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
char * strchr (const char *str, int c);

【参数】str 为要查找的字符串,c 为要查找的字符。

strchr() 函数将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。

注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。

【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char *s = "0123456789012345678901234567890";
    char *p;
    p = strchr(s, '5');
    printf("%s\n", s);
    printf("%s\n", p);
    system("pause");
    return 0;
}

输出结果为:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值