string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函数

string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函数

string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函数

部分转载于:https://blog.csdn.net/wuyuzun/article/details/82117136

字符串有多重要就不说了吧,而下面介绍的基本上都是重重之重。

先来个小故事缓解一下此刻的孤寂落寞之心、

穷学生和小女孩

  一个穷苦的学生考上了大学,可是家里没有多余的钱给他交学费,为了实现自己的大学梦,他利用暑假挨家挨户推销商品。为了凑足学费他舍不得多花一分钱,他硬着头皮向人讨些食物。

  他敲开了一户人家的门,是个小女孩开的门,他不好意思,就只向小女孩要了一杯水解渴。小女孩看他非常饥饿的样子,拿来水的时候还捎带了几块面包。他狼吞虎咽地吃着,小女孩偷偷地在旁边笑着看。

  吃完后,他问小女孩多少钱。小女孩说不用了,这些食物她家里很多。他很感动,觉得自己非常幸运,在陌生的地方还能得到他人如此温馨的关照。

  多年以后,小女孩得了很严重病,住进了医院。在医生的尽心医治和护理下,小女孩的病情逐渐缓和,过了一段时间,基本上康复了。出院那天,护士交给她医疗费用账单,她怔了好久都不敢打开,她知道自己可能要花一辈子辛苦工作,才还得起这笔医疗费。最后,他还是打开了,看到了上面空白处有一行字:一杯凉水和几块面包,足够偿还所有的医疗费。

  她禁不住泪水涟涟,也明白了,主治医师就是当年的那个穷学生。

  滴水之恩,涌泉相报。善良的人,是不会被生活遗弃的,因为,他(她)的生活里充满了感恩。

 

 

 

strlen(字符串数组名)

字符串有效长度函数; 
返回值:整型 
功能:用来测量一个字符串的有效长度(所谓有效,就是从字符串中的第一个字符开始,一直到第一个空字符’\0’为止(不包括这个空字符)所占的字节数); 
操作过程: 
这里写图片描述
举例:

#include <stdio.h>
#include <string.h>
/*注意:*/
//1. VC6.0中,编译器为一个字符型数据分配一个字节;
//2. 编译器会为每个字符串的结尾分配结束标志,也就是空字符'
#include <stdio.h>
#include <string.h>
/*注意:*/
//1. VC6.0中,编译器为一个字符型数据分配一个字节;
//2. 编译器会为每个字符串的结尾分配结束标志,也就是空字符'\0';
void main()
{
char a[] ={"I Love You"};    
char b[] = {"I Love You\0Holle"};
printf("字符串a的有效字符长度为:%d\n",strlen(a));
printf("字符串b的有效字符长度为:%d\n",strlen(b));
}
'; void main() { char a[] ={"I Love You"}; char b[] = {"I Love You
#include <stdio.h>
#include <string.h>
/*注意:*/
//1. VC6.0中,编译器为一个字符型数据分配一个字节;
//2. 编译器会为每个字符串的结尾分配结束标志,也就是空字符'\0';
void main()
{
char a[] ={"I Love You"};    
char b[] = {"I Love You\0Holle"};
printf("字符串a的有效字符长度为:%d\n",strlen(a));
printf("字符串b的有效字符长度为:%d\n",strlen(b));
}
Holle"}; printf("字符串a的有效字符长度为:%d\n",strlen(a)); printf("字符串b的有效字符长度为:%d\n",strlen(b)); }
  •  

运行: 
这里写图片描述

注意:字符串的有效长度归有效长度,但并不代表b字符串中第一个’\0’后的字符都是没有的;

strcat(字符串数组名1,字符串数组名2)

字符串拼接函数; 
返回值:字符指针 
功能:将字符串2的有效字符拼接在字符串1后,并且拼接时字符串1的结束标志被字符串2的第一个字符替代; 
注意: 
1.拼接函数执行完毕后,字符串2并没有改变,字符串1改变,最后字符串1等于原字符串1+字符串2; 
2.定义字符串1的时候,数组长度必须大于字符串1+字符串2的长度;所以字符串1在定义的时候如果知道后来要用strcat函数,那么必须定义足够的长度;(然而在实际操作工程中,定义第一个字符串的长度可能会被误操作,使得字符串1的长度不够容纳再放进来的字符串2,这是程序出现了语法上的错误,但是,编译器可能检查不出来,根据每个电脑的硬件,操作系统,编译环境的不同,或许我们感受不到这个错,但是实际上这个问题是真实存在的,这个一定要了解,不然编写大型程序的时候可能会把错误表现出来;) 
执行操作: 
这里写图片描述
举例:

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

void main()
{
    char a[30]="I Love China";  
    char b[]="I Love You";
    printf("拼接之前a占用的内存大小:%d\n",sizeof(a));
    printf("拼接后的字符串是:%s\n",strcat(a,b));
    printf("拼接后的a是:%s\n",a);
    printf("拼接后的b是:%s\n",b);
    printf("拼接后a的第15位字符是:%c\n",a[14]);
    printf("拼接后a的第17位字符是:%c\n",a[16]);
    printf("拼接之后a占用的内存大小:%d\n",sizeof(a));
}
  • 1

运行: 
这里写图片描述

strcpy(字符串数组名1,字符串数组名2)

复制字符串; 
功能:将字符串2内的字符复制并覆盖到字符串1; 
返回值:字符指针 
定义:strcpy(字符串1,字符串2); 含义:将字符串2的字符,全部把字符串1的内容给覆盖(包括结束标志和空字符) 
注意: 
1. 字符串1的定义空间也必须要大于加上字符串2存储空间;不然程序可能报错或者出现潜在错误; 
2. 复制函数执行完毕后,原字符串1的有效字符就被字符串2全部替换掉,并且执行后的字符串1的有效字符串等于字符串2; 
执行原则: 
情况1:字符串2的有效字符大于字符串1的有效字符 
这里写图片描述 
情况2:字符串2的游侠字符小于字符串1的有效字符(要切记这个原理) 
这里写图片描述 
注意:在对上图的复制后的函数进行输出时,若用%s输出,第一个空字符后的字符将不会被输出;如果用字符遍历%c输出,则可以全部输出;

举例:

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

void main()
{
    char a[30]="I Love You";
    char b[]="I Love China";
    printf("a的最初长度为:%d\na字符串是:%s\n",sizeof(a),a);
    printf("b的最初长度为:%d\nb字符串是:%s\n",sizeof(b),b);
    printf("将b赋值给a后的字符串长度为:%d\n字符串是:%s\n",sizeof(a),strcpy(a,b));
    printf("赋值后a的长度为:%d\na字符串是:%s\n",sizeof(a),a);
    printf("赋值后b的长度为:%d\nb字符串是:%s\n",sizeof(b),b);
}
  • 1

运行结果: 
这里写图片描述

strncpy(字符串名1,字符串名2,常量表达式n);

前n项选择复制函数; 
功能:赋值字符串2的前n个字符给字符串1的前n个; 
返回值:字符指针 
定义:strncpy(字符串名1,字符串名2,常量表达式n); 
注意: 
1. 这个函数和strcpy是类似的,主要功能都是类似的;但是strcpy是全复制,strncpy是前n项赋值; 
2. 注意n的值不要大于字符串2或字符串1字符长度;

操作过程; 
这里写图片描述

举例:

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

void main()
{
    char a[] = "I Love China";
    char b[] = "It is cat";
    printf("复制后的数组为:%s\n",strncpy(a,b,4));
    printf("复制后a的字符串是:%s\n",a);
}
  • 1

运行结果: 
这里写图片描述

strcmp(字符串名1,字符串名2)

字符串比较函数 
返回值: 
1,说明字符串1>字符串2; 
0,说明字符串1==字符串2; 
-1,说明字符串1<字符串2; 
功能:比较两个字符串的大小; 
比较的方式:将字符串1和字符串2中下标相同的字符从0下标开始逐个比较; 
比较的依据:ASCII表;(符号在表中的编码越大,字符就越大) 
注意: 
1. 函数执行完毕后两个字符串并没有发生改变;

操作过程: 
这里写图片描述

举例:

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

void main()
{
    char a[] = "I Love China";
    char b[] = "It is cat";
    printf("比较结果是:%d\n",strcmp(a,b));
}
  • 1

运行结果: 
这里写图片描述

strlwr(字符串名)和strupr(字符串名);

大写转小写转换符和小写转大写转换符; 
返回值:字符指针 
功能:strlwr将字符串内的大写字母全部转化为小写; 
strupr将字符串内的小写字母全部转化为大写字母; 
注意:转化后的字符串将发生改变; 
举例:

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

void main()
{
    char a[] = "I Love China";
    char b[] = "It is cat";
    printf("a转换成大写:%s\n",strupr(a));
    printf("b转换成小写:%s\n",strlwr(b));
    printf("转化后的a是:%s\n",a);
    printf("转化后的b是:%s\n",b);

}
  • 1

运行结果: 
这里写图片描述

仅仅用作自己学习,有同行欢迎交流

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114877.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • sqrt函数原型c语言,C语言sqrt函数的实例用法讲解

    sqrt函数原型c语言,C语言sqrt函数的实例用法讲解前言继承是OOP设计中的重要概念。在C++语言中,派生类继承基类有三种继承方式:私有继承(private)、保护继承(protected)和公有继承(public)。一、继承规则继承是C++中的重要特性,派生2021-03-2218:02:41大家有没有在项目中遇到过,将一些预定义的本地结构体转换为Json字符串后,发送到网络中的情形。那我猜想下大家常规的做法:写一个函数,传入结构体的指针,然后…

  • 数据结构导论 — (自考)「建议收藏」

    数据结构导论 — (自考)「建议收藏」自考学习时期又来了,首先学习的第一本自考科目是“数据结构导论”,刚拿到这本书的时候一头雾水,还不明白这本书讲解的是什么,通过三遍读书法(第一遍)的学习,对“数据结构导论”有了一定的认识,并且总结了下来。一.什么是数据结构导论首先要知道,我们在学习计算机解决问题过程中,离不开数据表示和数据处理,而数据表示的核心问题就—数据结构实现。跟设计模式一个道理,数据结构导论它…

  • 论文DepthTrack: Unveiling the Power of RGBD Tracking阅读及代码讲解[通俗易懂]

    论文DepthTrack: Unveiling the Power of RGBD Tracking阅读及代码讲解[通俗易懂]最近终于有了一篇的顶会像样的RGBDtracking的论文了:ICCV2021:DepthTrack:UnveilingthePowerofRGBDTrackingGithub:https://github.com/xiaozai/DeT数据集简介这边看完就随手记录一下关键的部分:主要是创建了个大规模的RGBDtrackingbenchmark:DepthTrack(有数据集之后才能促进算法的研究),当然随之也搞了个baselinetracker—DeT,这也是现在搞d

  • 软件测试期末考试复习题

    软件测试期末考试复习题一、选择题1.在软件测试阶段,测试步骤按次序可以划分为以下几步:(A)A、单元测试、集成测试、系统测试、验收测试B、验收测试、单元测试、系统测试、集成测试C、单元测试、集成测试、验收测试、系统测试D、系统测试、单元测试、集成测试、验收测试2.软件测试技术可以分为静态测试和动态测试,下列说法中错误的是(D)。A、静态测试是指不运行实际程序,通过检查和…

  • 两个队列实现一个栈思路c语言_栈和队列的主要区别

    两个队列实现一个栈思路c语言_栈和队列的主要区别用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTail”,“ap

  • C#中关于Struct(结构体)介绍以及附带案例解释,一看就会,一学就懂系列[通俗易懂]

    C#中关于Struct(结构体)介绍以及附带案例解释,一看就会,一学就懂系列[通俗易懂]Struct结构体的含义:结构体的作用?结构体的特点?结构体的声明?结构体的注意事项?…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号