字符数组与字符串

  • 引言
  • 字符数组的定义与初始化
  • 字符串的概念与存储
  • 常用的字符串处理函数
  • 送书福利

引言

前面介绍的一维数组与二维数组都是以数值型为例,其实数组中也可以存储字符型数组,称为字符数组。字符数组中每一个元素存放一个字符。
前面介绍过字符串常量,以双引号括起来的一个字符序列,如“Beijing”的形式,但并没有提到过字符串变量,因为C语言中并没有字符串变量的概念。对于字符串,C语言以字符数组的形式存储。

字符数组的定义与初始化

1.字符数组的定义
字符数组的定义与整形数组或浮点型数组定义相似,定义形式为:

char 数组名[元素个数];

例如:

char ch[10];

定义了一个字符数组ch,其中包含10个字符元素。

ch[0]='b';ch[1]='e';ch[2]='i';ch[3]='j';ch[4]='i';ch[5]='n';ch[6]='g';

则数组在内存中的存储形式如图所示:

2.字符数组的初始化
字符数组的初始化形式和一维数组类似,可以通过为每个数组元素指定初值字符来实现。例如:

char c[5]={'h','e','l','l','o'};

也可以对字符数组中部分元素赋初值。例如:

char c[5]={'h','e','l'};

如果对字符数组初始化后,即便是部分赋值,没有赋值的元素中的内容是以‘\0’的形式存在。(‘\0’代表ASCLL码为0的字符,表示一个“空操作”,不可显示,也不起任何控制作用,只起一个标志作用。)

同一维数组初始化一样,如果提供的初值个数与数组的长度相同,可在定义时省略数组长度,系统将根据初值个数为字符组分配内存空间。例如:

char c[]={'h','e','l','l','o'};

则字符数组c的长度由系统自动确定为5。
3.字符数组的引用
对于字符数组元素的使用可以有两种形式:逐个引用形式和整体引用形式。
字符数组的逐个字符引用,与引用数值数组元素类似。
(1)除了可以通过初始化使字符数组中的各个元素得到初值外,也可以使用getchar()scanf()函数输入字符。
例如:

char ch[10]="hello";
int i;
for(i=0;i<10;i++)
scanf("%c",&ch[i]);  /*也可以使用ch[i]=getchar();*/

(2)字符数组的输出
字符数组元素的单个输出,可以用putchar()printf()函数。
例如:

char ch[10]="Hello!";
int i;
for(i=0;i<10;i++)
printf("%c",ch[i]);/*也可以使用putchar(ch[i]);*/

字符串的概念与存储

1.字符串的概念
字符串是包含若干有效字符的字符序列。C语言中的字符串,可以包括字母、数字、特殊字符、转移字符等。
在C语言中字符串是以字符数组的形式存储的。因此声明字符串变量和声明字符数组是一样的。

char string1[30];

字符数组与字符串数组的区别:
'\0'结尾的是字符串数组。因此对字符数组的操作,如输入、输出、初始化等,就可以进行字符数组的整体操作。
2.字符数组的整体初始化
字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。
例如:

char str1[15]={"Hello boy"};

char str1="Hello boy";

等价于

char str1[20]={'H','e','l','l','o',' ','b','o','y','\0'};

注意:字符串结束标志也要占用一个元素的存储空间,因此在声明字符数组长度时,至少为字符串所需长度加1。
3.字符数组的整体引用
(1)使用printf()函数输出字符串

char ch[20]="Hello boy";
printf("%s\n",ch);

输出结果:

(2)使用scanf()函数输入字符串

char str[20];
scanf("%s",str);

(3)使用puts()函数输出字符串

puts(字符数组);
例如:puts(Hello);

(4)使用gets()函数输入字符串

gets(字符数组);

注意:
使用gets()函数输入的字符串,其长度没有限制,编程者需保证字符数组有足够大的空间来存放输入的字符串。

gets()函数输入的字符串中允许包含空格,而scanf()函数不允许。

常用的字符串处理函数

1.字符串连接函数strcat()strncat
strcat()函数:

strcat(字符数组,字符串);
例如:strcat(str1,"Boy!");

功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符串数组”中。
strncat()函数:

strncat(字符数组,字符串,n);
例如:strncat(str1,str2,8);

功能:从字符串中截取n个字符追加到字符数组末尾。
2.strcpy()函数和strncpy()函数

strcpy(字符数组,字符串)

功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。

strncpy(字符数组,字符串,n)

功能:将“字符串”中的前n个字符复制到“字符数组”中。
3.strcmp()函数

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

功能:比较两个字符串的大小。
相等的话返回值为0;字符串1<字符串2返回值为负整数;字符串1>字符串2返回值为正整数。
4.strlen函数

strlen(字符串)

功能:求字符串的实际长度。
5.strlwr()函数

strlwr(字符串)

功能:将字符串中的大写字母转换成小写,其它字符不转换。
6.strupr()函数

strupr(字符串)

功能:将字符串中的小写字母转换成大写,其它字符不转换。

送书福利

书籍简介:
本书以TensorFlow为深度学习框架,主要讲解计算机视觉任务中相关的知识。本书的内容十分连贯,每个章节的内容都会使用到前面章节讲解过的知识,旨在最大限度保证读者学习的连贯性,同时本书减少了晦涩难懂的数学公式,尽力图示促进读者理解。相信读者读完本书后会对计算机视觉相关任务有一个更清晰的理解。

链接:
https://item.jd.com/13334606.html
http://product.dangdang.com/29269335.html
注意事项:
1.抽奖方式:评论区随机一位幸运者
2.开奖时间:本周三
3.领奖方式:提前添加微信Kcyu68,关注开奖时间,一直联系不到就给别人了

(文末送书)字符数组与字符串相关推荐

  1. 【iToday】涵盖100+技术网站的一站式资讯平台 | 文末送书

    里面包含了上百个IT网站,欢迎大家访问:http://itoday.top/#/ iToday,打开信息的新时代.作为一家创新的IT数字媒体平台,iToday致力于为用户提供最新.最全面的IT资讯和内 ...

  2. 文末送书 | 数据分析简单入门

    这是小小本周的最后一篇,本周重点!文末送书, 我是小小,下面是本期文章,为您奉上! 前言 本实例将会以一个完整的例子用来阐述一个较为简单的Python数据分析.其中Python基础部分不再讲解 构建数 ...

  3. 性能无敌的HikariCP数据库连接池实战(文末送书)

    导读:数据库连接池在Java数据库相关中间件产品群中,应该算是底层最基础的一类产品,作为企业应用开发必不可少的组件,无数天才们为我们贡献了一个又一个的优秀产品,它们有的随时代发展,功成身退,有的则还在 ...

  4. 文末送书|用Pandas分析了75w多条数据,揭秘美国选民的总统喜好!

    点击"一行数据",选择"置顶公众号" 文末送书,不可错过! 来源:天池大数据科研平台 原文:https://tianchi.aliyun.com/noteboo ...

  5. 文末送书 | 当Python遇上高考,会发生什么?

    (文末送书哦!) 延期一个月之后,1071万考生终于熬出头了. 这届高考太难了,不仅考学生,更是考验疫情的防控能力. 但是说到难,2018年浙江省教育厅的一个决定,让不少人感叹真难! 原来早在2017 ...

  6. 真实的上海IT圈:张江男vs漕河泾男(文末送书)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 人生难得几回搏,此时不搏待何时. ...

  7. 媳妇居然在家偷偷背着我偷看我的面试笔记,一个月后拿下大厂offer!(文末送书)...

    知乎热议: 到底要掌握哪些技术才能顺利的找一份20K的工作? 根据这些年的工作经验,加上网络搜集,我特意整理了一套针对职场进阶的干货! 有很多朋友靠着这些内容进行复习拿到了BATJ等大厂的offer, ...

  8. 月薪没过20K的程序员要注意了!(文末送书)

    知乎热议: 到底要掌握哪些技术才能顺利的找一份20K的工作? 根据这些年的工作经验,加上网络搜集,我特意整理了一套针对职场进阶的干货! 有很多朋友靠着这些内容进行复习拿到了BATJ等大厂的offer, ...

  9. 挖槽!堪称神级的Java技术手册火了???(文末送书活动)

    前言 本文是为了帮大家快速回顾了Java中知识点,这套面试手册涵盖了诸多Java技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果. 本来想将文件上传到github上 ...

最新文章

  1. 2022-2028年中国钢桶行业市场研究及前瞻分析报告
  2. STM32堆和栈(Heap Stack)及SRAM存储使用
  3. 王者荣耀s15服务器维护,王者荣耀16日S15赛季更新内容
  4. python接口测试demo_python http接口自动化测试简单demo
  5. 阿里达摩院发布2019年十大科技趋势
  6. access的papersize命令_巡检命令及查看参数
  7. asp.net中使用#include语法将文件添加到页面
  8. VMware 下安装centos7,无法进入图形化界面
  9. 检测CCD Dead Pixel
  10. Webstorm—Webstorm汉化(图文详解)
  11. 计算机科学发展与大规模集成电路,计算机科学与技术发展趋势
  12. MediaFoundation视频采集
  13. DAP移动化功能说明
  14. Lotus 新手运维手册
  15. MyBatis 与 MyBatis-Plus 的区别
  16. springboot POST 405 错误
  17. python多行显示_设置图例以多行显示(在python中) - python
  18. 二叉树系列(1)-实现排序二叉树
  19. 软件测试用例 单元测试,软件单元测试的测试用例编写方法
  20. 人工智能:语音识别技术介绍

热门文章

  1. IMU、AHRS、VRU和GNSS、INS
  2. MISAG与MIMAG:基因组质量评估标准
  3. 游戏编程基础(五)背景地图滚动显示
  4. 关于惠普打印机驱动解压时候出现的问题
  5. 明年9月,南京大学苏州校区将正式招生!
  6. 微型计算机原理及应设计试卷,微型计算机原理及应用试卷2002年10月
  7. inter uhd graphics630显卡驱动_显卡检测工具 GPUZ v2.35.0 简体中文汉化版
  8. 计算机路由器交换机常用配置命令
  9. 仿系统闹钟,实现更新安装之后还可以响铃,开机启动功能需要手机自带开机自启动
  10. 瑞萨RH850/F1L-片上资源分配(Flash,RAM,外设资源)