版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计字符串与字符数组CONTENTS01字符数组02字符串目录字符数组与整数数组存放整数数据一样,字符数组是存放字符数据的数组,其中每一个元素存放的值都是单个字符。字符数组字符数组也分一维数组与二维数组。(1)一维字符数组的一般形式为:
char数组名[常量表达式](2)二维字符数组的一般形式为:
char数组名[常量表达式1][常量表达式2]
(3)字符数组的引用方法与其他数组完全相同。字符数组字符数组定义与初始化方式,与整数数组类似,初始化方法如下:
charc[5]={'h','e','l','l','o'};
该字符数组在内存中的状态如下图所示。字符数组【样例1】输入一行字符,统计其中小写字母的个数。字符串
字符串是由数字、字母、下划线、空格等各种字符组成的一串字符,由双引号括起来,它有一个结束标志‘\0’。在C语言中有字符串常量,但没有字符串变量这个概念,字符串是通过字符数组来存储和处理的。字符串例如:字符串"abcde",在数组中的存放形式如图所示由此可见,字符串其实就是一个以空字符‘\0’结尾的字符数组。长度为n的字符串,需要n+1个内存单元字符串字符数组初始化C语言允许用户在定义字符数组时,将字符串常量作为初值赋给字符数组。例如:
charstr[6]=“Hello";等价于
charstr[6]={“Hello"};也等价于下面的初始化:
charstr[6]={‘H',‘e',‘l',‘l',‘o','\0'};但与下面的初始化是不等价的:
charstr[]={‘H',‘e',‘l',‘l',‘o'};
字符串【注意】
1、字符数组与字符串的区别:字符串是用字符数组存储的,只是在字符串的最后一个字符的后面一个单元,存储结束标志‘\0’
2、字符数组不一定就是字符串,它与普通数组没有本质的区别,只是数据类型不同而已。
3、存储字符串的数组长度至少是字符串的有效长度+1。C语言程序设计字符串与指针CONTENTS01字符数组与字符指针02利用指针变量处理字符串目录字符数组与字符指针在C语言字符串是通过字符数组来存储和处理的,这种字符数组必须以空字符’\0’(空字符)结尾。长度为n的字符串,需要n+1个内存单元。例如:例如字符串"abcde",在数组中的存放形式如图所示。字符数组与字符指针字符型指针用char*来定义,指针变量存储的是:字符所在单元的地址。例如:如下两条指令chararr[]="hello";char*pr=arr;则arr与pr的示意图如图所示利用字符指针变量处理字符串【样例1】利用指针移动,输出字符串利用字符指针变量处理字符串【样例2】利用指针变量将字符串1复制到字符串2分析:
charstr1[100],ch;charstr2[100];char*p1,*p2;p1=str1,p2=str2;
取出p1位置的字符ch
当(ch!=‘\0’)时
{将ch写入p2单元。将ch1ch2写进p3中
移动指针;
继续读p1单元的字符ch;}
将’\0’写进p2输出字符串2;
利用字符指针变量处理字符串【样例2】程序代码intmain(){charch;char*p1,*p2;charstr1[80]="abcd";charstr2[80];p1=str1;p2=str2;ch=*p1;while(ch!='\0'){*p2=ch;p1++;p2++;ch=*p1;}*p2='\0';p2=str2;ch=*p2;while(ch!='\0'){printf("%c",ch);p2++;ch=*p2;}return0;}C语言程序设计字符串的输入输出CONTENTS01字符串表示02字符串输入输出目录字符串表示在C语言字符串是通过字符数组来存储,数组中以空字符’\0’表示字符串结束。例如:如下指令,内存单元如图所示字符型指针用char*它不仅可以指向一个字符型数据,还可以表示一个字符串。chararr[]="hello";char*pr=arr;pr表示字符串时,表示的是从pr指向的位置到’\0’所在的内存单元之间的字符。思考:
char*p1;
p1=pr+2;问:p1表示字符串时,表示什么样的字符串??字符串表示【样例讲解】字符串输入输出循环语句+单字符的输入与输出利用标准输入输出函数scanf()和printf(),配合%c格式描述符。intmain(){ inti;charstr[80];for(i=0;i<10;i++)scanf("%c",&str[i]);str[10]='\0';i=0;while(str[i]!='\0'){printf("%c",str[i]);i++;}return0;}字符串输入输出循环语句+单字符的输入与输出使用getchar()和putchar()函数输入输出字符串。intmain(){inti=0;charstr[80];printf("请输入一串字符:");while((str[i]=getchar())!='\n')i++;str[i]='\0';for(i=0;str[i]!='\0';i++)putchar(str[i]);return0;}字符串输入输出整体输入与输出利用标准输入输出函数scanf()和printf(),配合%s格式描述符。调用格式为:scanf("%s",字符数组名);//输入一个字符串后,会自动在字符串后面加上'\0'printf("%s",字符数组名);intmain(){charstr[80];printf("请输入一串字符:");scanf("%s",str);printf("你输入的是:%s\n",str);return0;}注意:不能使用scanf()函数输入一个包含空格的字符串。字符串输入输出整体输入与输出使用函数gets()和puts()
。调用格式为:
gets(字符数组名);
输入一行字符时以Enter键作为结束符,且自动将回车符'\n'转换为'\0',作为字符串的结束标志。puts(字符数组名);该函数可以将一个字符串(以'\0'结束的字符序列)输出到屏幕,输出后会自动换行。总结函数格式区别scanf()scanf("%s",字符数组名)不能输入带有空格的字符串gets()gets(字符数组名)只能输入一个字符串,遇回车符结束输入,且自动将回车符'\n'转换为'\0'printf()printf("%s",字符数组名)一个printf()函数可以输出多个字符串,输出后不会自动换行puts()puts(字符数组名)一个puts()函数只能输出一个字符串,输出后会自动换行输入输出字符串的函数的比较C语言程序设计字符串的常见函数CONTENTS01字符串常见函数02字符串与整数转换目录字符串常见函数字符串复制函数strcpy()一般调用格式为:
strcpy(字符串l,字符串2)功能:将字符串2复制到字符串1。intmain(){ charc1[]="abcde";
charstr[100]; strcpy(str,c1); puts(str); return0;}strncpy()函数,它的调用格式为:
strncpy(字符串1,字符串2,n)将字符串2的前n个字符复制到字符串1中#include<string.h>intmain(){ charstr1[10]="abcdefg",str2[]="ABCDEF"; strncpy(str1,str2,4); puts(str1); return0;}#include<string.h>字符串常见函数字符串连接函数strcat()一般调用格式为:
strcat(字符串l,字符串2)功能:连接两个字符串。#include<string.h>intmain(){ charc1[20]="wang,"; strcat(c1,"howareyou!"); puts(c1); return0;}字符串常见函数字符串比较函数strcmp()一般调用格式为:
strcmp(字符串l,字符串2)功能:比较两个字符串的大小。函数的返回值为一个整数。即:
当字符串1<字符串2时,返回值<0
当字符串1=字符串2时,返回值=0
当字符串1>字符串2时,返回值>0#include<string.h>intmain(){ charc1[]="abcde",c2[]="abcde"; printf("%d\n",strcmp(c1,c2)); printf("%d\n",strcmp("abcde","abcf")); printf("%d\n",strcmp("abxe","abcde")); return0;}字符串常见函数求字符串长度函数strlen()一般调用格式为:
strlen(字符串)功能:计算字符串的长度,不包括结束标志'\0'。#include<string.h>intmain(){ charc1[]="abcde"; printf("%d\n",strlen(c1)); return0;}字符串常见函数大写字母转小写字母函数strlwr()一般调用格式为:
strlwr(字符串)功能:将大写字母转换为小写字母。#include<string.h>intmain(){ charc1[]="AaBbCc"; printf("%s\n",c1);
strlwr
(c1); printf("%s\n",c1); return0;}字符串常见函数#include<string.h>intmain(){charc1[]="AaBbCc";printf("%s\n",c1);strupr(c1);printf("%s\n",c1);return0;}小写字母转大写字母函数strupr()一般调用格式为:
strupr(字符串)功能:将小写字母转换为大写字母。字符串常见函数字符串查找函数char*strchr(constchar*str,charc);strchr()函数用来查找指定字符在指定字符串中第一次出现的位置strrchr()函数与strchr()函数相比,strrchr()函数用来查找指定字符在指定的字符串中最后一次出现的位置,char*strrchr(constchar*str,charc);strstr()函数在字符串中搜索是否包含一个子字符串char*strstr(constchar*haystack,constchar*needle);字符串常见函数#include<string.h>intgetcount(char*str,charc){ intcount=0; char*p=str;//获取第一次出现字符变量c值的指针位置
while((p=strchr(p,c))!=NULL) { p++; count++; } returncount;}intmain(){intcount;charstr[100]="abcabeaff";charc='a';count=getcount(str,c);printf("字符%c出现了%d次\n",c,count);return0;}字符串与整数转换有时需要将字符串转换成整数intatoi(constchar*str);该函数在stdlib.h中定义C语言程序设计字符串作为函数参数CONTENTS01字符串作为函数参数02样例分析目录字符串作为函数参数在C语言字符串是通过字符数组来存储,这种字符数组必须以空字符’\0’(空字符)结尾。例如chararr[]="hello";
char*pr=arr;因此,字符串可使用数组名或指针变量来表示指针变量表示字符串,是指针变量所指向的内存单元到’\0’所在的内存单元之间所存储的所有字符。可利用字符指针变量,实现函数间字符串的实参与形参的传递。样例分析【样例1】“abc”“1234567”a1b2c34567将字符串2的第1个字符插入到字符串1的第1个字符后,将字符串2的第2个字符插入到字符串1的第2个字符后,依此类推。多出的部分全部放在最后,形成字符串3分析:指针变量p1、p2、p3分别指向字符串1字符串2与字符串3
取出p1所指的字符ch1
取出p2所指的字符ch2
当(ch1!=‘\0’并且ch2!=‘\0’){
将ch1ch2写进p3中
移动指针;}
处理剩余部分。
【样例1】程序代码样例分析样例分析【样例2】将字符串2插入在字符串1的第3个元素后,如果字符串1不足3个,则将字符串2连接在字符串1后。得到的新字符串存放在字符串3分析:
voidmy_con(char*p1,char*p2,char*p3)
{
if(strlen(p1)<=3){
复制p1p3,p3与p2连接}else{
复制p1前3个
p3p3与p2连接p3;p2移动第4位置
p3与p2连接p3}}样例分析【样例2】将字符串2插入在字符串1的第3个元素后,如果字符串1不足3个,则将字符串2连接在字符串1后。得到的新字符串存放在字符串3程序代码:voidmy_con(char*p1,char*p2,char*p3){if(strlen(p1)<=3){strcpy(p3,p1);strcat(p3,p2);}else{strncpy(p3,p1,3);strcat(p3,p2);p1+=3;strcat(p3,p1);}}intmain(){chararr1[80];chararr2[80];chararr3[80];scanf("%s",arr1);scanf("%s",arr2);my_con(arr1,arr2,arr3);printf("arr3=%s\n",arr3);return0;}C语言程序设计字符串函数的使用CONTENTS01去除字符串左边空格或右边空格02求子串出现的次数目录去除字符串符串左边空格【分析】
1、移动p1指针至非空格字符所在单元
2、复制p1p2【样例1】将字符串p1的最左边的空格去掉,形成的新的字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026晶圆级测试技术突破与成本分摊模式创新报告
- 2026明天人工智能医疗行业市场现状供需分析及投资评估规划分析研究报告
- 2026教育评价体系改革影响分析及第三方服务与技术支撑研究报告
- 2026教育直播平台行业市场调研及商业模式评估报告
- 2026教育信息化市场格局重构与投资价值评估报告
- 2026放射治疗精准化设备技术路线与市场替代效应分析报告
- 2026摩洛哥光伏发电行业市场调研分析及投资策略规划分析报告
- 2026摩托车与电动车行业市场情况供需分析及投资评估规划分析研究报告
- 2026户用光伏电站资产证券化操作难点与风险控制框架设计报告
- 2026慢性病数字化管理平台市场机遇与挑战分析报告
- 城市供水管道维护与抢修操作手册(标准版)
- 2025年大学机械设计基础(设计基础理论)试题及答案
- 2025年广州市初中信息技术学业水平测试真题及答案
- 《银行保险机构消费者权益保护管理办法》测试练习竞赛考试题库(附答案)
- 重塑领导力汪大正课件
- DB23∕T 1642-2020 黑龙江省绿色建筑评价标准
- 2025年兰州市中考生物试卷真题(含答案及解析)
- 随机对照试验案例课件
- 设备编号管理标准与实施细则
- 写字楼安全知识培训课件
- 导航原理(第3版)课件 第四章3-时间式导航测角及误差分析-频率式导航测角及误差分析-惯性力学测角-
评论
0/150
提交评论