C语言程序设计-基于计算思维的培养 课件 第9章 字符串_第1页
C语言程序设计-基于计算思维的培养 课件 第9章 字符串_第2页
C语言程序设计-基于计算思维的培养 课件 第9章 字符串_第3页
C语言程序设计-基于计算思维的培养 课件 第9章 字符串_第4页
C语言程序设计-基于计算思维的培养 课件 第9章 字符串_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章字符串目录/Contents字符串常量字符串的输入输出字符串处理函数字符数组和字符指针向函数传递字符串从函数返回一个字符串指针问题的提出用双引号括起的一串字符是字符串常量,C语言自动为其添加′\0′结束符"Howareyou"Ilovechina\0一串以‘\0’结尾的字符在C语言中被看做字符串字符串的存储是字符数组,但不代表字符串数组的最后一个元素必须是'\0'◆C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理◆字符数组每个元素都是字符类型的数组

charstr[80];字符串初始化◆用字符型数据对数组进行初始化charstr[7]={‘H',‘e',‘l',‘l',‘o',‘!’,'\0'};◆用字符串常量直接对数组初始化charstr[]={“Hello!"};charstr[]=“Hello!";◆多个字符串常量直接对二维数组初始化

charmonths[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"};字符指针定义和初始化方法不同

str=“World";World\0“World"ptrcharstr[6]={“World"};

char*ptr;ptr=“World";strWhy?数组名str是地址常量

字符指针ptr是变量

char*ptr=“World";字符指针char*ptr="World";*ptr="F";ptr=“HelloWorld!";charstr[]="World";char*ptr=str;prt=“HelloWorld!”;*ptr=“F”;字符指针ptr是变量,可以指向不同的字符串,但不能修改字符串的值,”World”是字符串常量

字符指针要修改字符串中的字符,必须先用字符数组存储字符串,再让字符指针指向该字符数组字符串的输入/输出(逐个字符输入)inti=0;while((str[i++]=getchar())!=‘\n’);str[i]=‘\0’;按字符逐个输入charstr[10];字符串的输入/输出(逐个字符输出)按字符逐个输入/输出for(i=0;str[i]!='\0';i++){ putchar(str[i]);}putchar('\n');charstr[10];一般不用字符串长度控制字符串的输入/输出(逐个字符输入/输出)【例9.1】

按%c格式控制符,从键盘输入一个字符串,并将它显示出来。#include<stdio.h>#defineN20intmain(){ inti; charstr[N]; printf("Enterastring:"); for(i=0;i<N-1;i++) { scanf("%c",&str[i]); } str[i]=‘\0’; for(i=0;str[i]!='\0';i++) { printf("%c",str[i]); } return0;}字符串的输入/输出(整体输入/输出)按字符串整体输入/输出scanf("%s",str);printf("%s",str);charstr[10];gets(str);puts(str);不能输入带空格的字符串可以输入带空格的字符串空格、回车或制表(Tab)符是输入数据的分隔符,因而不能被读入,输入遇到这些字符时,系统认为字符串输入结束【例9.2】

按%s格式控制符,从键盘输入一个字符串,并将它显示出来。#include<stdio.h>#defineN20intmain(){ charname[N]; printf("Enteryourname:"); scanf("%s",name); printf("Hello%s",name); return0;}字符串的输入/输出Why?字符串的输入/输出【例9.3】

使用gets()从键盘输入一个带空格的字符串,然后使用puts()把它显示出来。#include<stdio.h>#defineN20intmain(){ charstring[N];char*ptr=string; printf("Enterastring:"); gets(ptr); printf(“Hello%s!\n”,ptr); return0;}不限制输入字符串的长度易引起缓冲区溢出,给黑客攻击以可乘之机【例9.3】

使用gets()从键盘输入一个带空格的字符串,然后使用puts()把它显示出来。#include<stdio.h>#defineN20intmain(){ charstring[N]; printf("Enterastring:"); gets(string); puts(string); return0;}#include<stdio.h>#defineN20intmain(){charstring[N];printf("Enterastring:");fgets(string,sizeof(string),stdin);puts(string);return0;}字符串的输入/输出例9.3如果用户输入的字符个数超过了数组的长度,导致程序出错或异常终止更安全的方法是用fgets函数#include<stdio.h>#defineN20intReadLine(charstr[],intn);intmain(){ charstring[N]; intn; printf("Enterastring:"); n=ReadLine(string,N); puts(string); printf("n=%d",n); return0;}intReadLine(charstr[],intn){ charch; inti=0; while((ch=getchar())!='\n') if(i<n) str[i++]=ch; str[i]='\0'; returni;}字符串的输入/输出安全灵活!字符串处理函数◆#include<string.h>strcpy(目的字符串,源字符串);字符串复制strlen(字符串);字符串长度strcat(目的字符串,源字符串);字符串连接strcmp(字符串1,字符串2);字符串比较字符串处理函数◆#include<string.h>strlen(字符串);字符串长度charstr[10]={"China"};printf("%d",

strlen(str));打印结果是5、6,还是10?China\0\0\0\0\0不包括\0的实际字符的个数字符串处理函数◆#include<string.h>strlen(字符串);字符串长度len=

strlen(str);for(i=0;i<len;i++){ putchar(str[i]);}putchar('\n');用长度控制字符串输出字符串处理函数◆#include<string.h>strcpy(目的字符串,源字符串);字符串复制字符串能否用=整体复制?str2=str1;strcpy(str2,str1);注意复制的方向!str2必须足够大!想想这个函数是如何实现字符串复制的?◆#include<string.h>strcat(目的字符串,源字符串);字符串连接strcat(str2,str1);str2必须足够大!Hello\0\0\0\0\0\0\0

China\0HelloChina\0\0字符串处理函数◆#include<string.h>strcmp(字符串1,字符串2);字符串比较字符串能否用>、<、==比较大小?if(str2==str1)if(strcmp(str2,str1)==0)字符串处理函数◆#include<string.h>strcmp(字符串1,字符串2);字符串比较字符串是如何比较大小的?当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,返回其ASCII码比较的结果值comparecomputercompare<computer表示strcmp(str1,str2)<0为真字符串处理函数#include<stdio.h>#include<string.h>#defineM20#defineN10voidSortName(charstr[][N],intn)intmain(){ inti,n; charname[M][N]; printf("Inputthenumberofpersons:"); scanf("%d",&n); getchar();/*清空缓冲区*/ printf("Inputtheirnames:\n"); for(i=0;i<n;i++) { gets(name[i]);/*输入n个人名*/ } SortName(name,n); printf("Aftersortedresults:\n"); for(i=0;i<n;i++) { puts(name[i]); } return0;}【例9.5】

从键盘输入不超过20人的名字字符串,用函数编写这些字符串的排序程序并测试之。运行结果:(屏幕显示)Inputthenumberofpersons:3Inputtheirnames:JohnWhitePeterAftersortedresults:JohnPeterWhite字符串处理函数应用voidSortName(charstr[][N],intn){ inti,j; chartemp[N]; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(strcmp(str[j],str[i])<0)/*字符串比较,不能使用关系运算符*/ { strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp); } } }}字符串处理函数应用向函数传递字符串◆向函数传递字符串时,既可使用字符数组作函数参数,也可使用字符指针作函数参数◆地址传递向函数传递字符串【例9.6】

编写一个记录字符串中单词个数的函数,并测试之。#include<stdio.h>#defineN80intWordCount(constcharstr)intmain(){ chars[N]; intcnt; printf("Inputastring:"); gets(s); cnt=WordCount(s); printf("cnt=%d",cnt); return0;}intWordCount(constcharstr[]){intcount=0;inti=0;while(str[i]!='\0'){while(isspace(str[i]))++i;if(str[i]!='\0'){++count;while(!isspace(str[i])&&str[i]!='\0') ++i;}}returncount; }向函数传递字符串#include<stdio.h>#defineN80intWordCount(constchar*str);intmain(){ chars[N]; intcnt; printf("Inputastring:"); gets(s); cnt=WordCount(s); printf("cnt=%d",cnt); return0;}intWordCount(constchar*str){ intcount=0; while(*str!='\0') { while(isspace(*str)) ++str; if(*str!='\0') { ++count; while(!isspace(*str)&&*str!='\0') ++str; } } returncount;}用字符指针表示字符串向函数传递字符串【例9.7】

编写程序,从键盘输入一行字符串,把字符串中每个字母e均变为E,然后创建一个新串,并将每个单词换行显示出来。#include<stdio.h>#defineM100voidReadLine(charstr[]);char*Change(constchar*);intmain(){chars[M];printf("\nWhatisyour

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论