书签 分享 收藏 举报 版权申诉 / 63
上传文档赚钱

类型第10章 字符串和文本处理.ppt

  • 上传人(卖家):最好的沉淀
  • 文档编号:5819390
  • 上传时间:2023-05-11
  • 格式:PPT
  • 页数:63
  • 大小:7.83MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第10章 字符串和文本处理.ppt》由用户(最好的沉淀)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    第10章 字符串和文本处理 10 字符串 和文 处理
    资源描述:

    1、第第10章章 算法和数据结构基础算法和数据结构基础字符串和文本处理字符串和文本处理哈尔滨工业大学哈尔滨工业大学10.1.1 字符串的存储与表示字符串的存储与表示用双引号括起的一串字符是用双引号括起的一串字符是字符串常字符串常量量,系统自动为其添加,系统自动为其添加空字符空字符0用用空字符空字符0(ASCII码值为码值为0)标志字符串的末尾标志字符串的末尾字符串结束标志字符串结束标志printf(How are you.n);printf(How are you.n);How are you._How are you._10.1.1 字符串的存储与表示字符串的存储与表示nC语言没有提供专门的字符

    2、串数据类型语言没有提供专门的字符串数据类型n字符数组字符数组每个元素都是字符类型的数组每个元素都是字符类型的数组是字符数组,但不一定代表字符串是字符数组,但不一定代表字符串数组的最后一个元素必须是数组的最后一个元素必须是0才表示字符串才表示字符串不要混淆不要混淆0(ASCII码为码为0)与与0(ASCII码为码为48)n字符数组的定义字符数组的定义n#define STR_LEN 80nchar strSTR_LEN+1;n字符数组的初始化字符数组的初始化用字符常量的初始化列表对数组初始化用字符常量的初始化列表对数组初始化 char str6=C,h,i,n,a,0;用字符串常量直接对数组初始

    3、化用字符串常量直接对数组初始化 char str6=China;char str6=China;char str =China;char str10=China;char str4=China;10.1.1 字符串的存储与表示字符串的存储与表示10.1.1 字符串的存储与表示字符串的存储与表示n用一维字符数组存储单个字符串用一维字符数组存储单个字符串char str6=H,e,l,l,o,0;char str10=H,e,l,l,o;10.1.1 字符串的存储与表示字符串的存储与表示n用二维字符数组存储多个字符串用二维字符数组存储多个字符串char weekday10=Sunday,Monda

    4、y,Tuesday,Wednesday,Thursday,Friday,Saturday;10.1.1 字符串的存储与表示字符串的存储与表示pStrHello China;char*pStr=pStr是一个指向常量存储区中的字符串的指针是一个指向常量存储区中的字符串的指针变量变量char*pStr;pStr=Hello China;可修改可修改pStr的值(指向),但不可以对它所指向的的值(指向),但不可以对它所指向的存储单元进行写操作存储单元进行写操作=W;n(1)让字符指针指向一个字符串常量让字符指针指向一个字符串常量n(2)让字符指针指向一个字符数组让字符指针指向一个字符数组10.1.1

    5、 字符串的存储与表示字符串的存储与表示pStrHello Chinachar str=*pStr=W;char*pStr;pStr=str;pStr=&str0;pStr的值(指向)可被修改,的值(指向)可被修改,它所指向的字符串也可被修改它所指向的字符串也可被修改str0=W;pStr0=W;#define STR_LEN 80char strSTR_LEN+1;10.1.2 字符串的输入和输出字符串的输入和输出n(1)以以%c格式,逐个字符输入格式,逐个字符输入/输出输出与使用其他类型数组不同的是,通常不使用长度即计数控制的循环来判断数组元素是否遍历结束,而使用条件控制的循环,利用字符串结

    6、束标志0判断字符串中的字符是否遍历结束。scanf(%s,str);printf(%sn,str);gets(str);puts(str);不能输入带空格不能输入带空格的字符串的字符串可以输入带空格可以输入带空格的字符串的字符串#define STR_LEN 80char strSTR_LEN+1;10.1.2 字符串的输入和输出字符串的输入和输出n(2)以以%s格式,整体输入格式,整体输入/输出字符串输出字符串n(3)使用字符串处理函数使用字符串处理函数gets()和和puts()整体输入整体输入/输出字输出字符串符串10.1.2 字符串的输入和输出字符串的输入和输出n【例例10.1】下面程

    7、序用于演示函数下面程序用于演示函数gets()与与scanf()的不同。的不同。#include#define N 20int main(void)char cN+1=;printf(Input a string:n);scanf(%s,c);printf(Output a string:n);printf(%sn,c);printf(Input a string:n);gets(c);printf(Output a string:n);puts(c);return 0;10.1.2 字符串的输入和输出字符串的输入和输出n【例例10.1】下面程序用于演示函数下面程序用于演示函数gets()与与

    8、scanf()的不同。的不同。#include#define N 20int main(void)char cN+1=;printf(Input a string:n);scanf(%s,c);printf(Output a string:n);printf(%sn,c);getchar();/读走前面的读走前面的回车符回车符 printf(Input a string:n);gets(c);printf(Output a string:n);puts(c);return 0;10.1.2 字符串的输入和输出字符串的输入和输出n(3)使用字符串处理函数使用字符串处理函数fgets()和和fpu

    9、ts()整体输入整体输入/输出字符串输出字符串函数函数fgets()的原型为:的原型为:char*fgets(char*buf,int n,FILE*fp);功能是从功能是从fp所指的文件中读取字符串并在字符串末尾添加所指的文件中读取字符串并在字符串末尾添加0,然后存入,然后存入s,最多读最多读n-1个字符。个字符。可以限制用户输入的字符数可以限制用户输入的字符数,更安全。,更安全。fgets()与与gets()对回车换行符的处理也是不同的,对回车换行符的处理也是不同的,fgets()从指定的流读字符串从指定的流读字符串,读到回车换行符时将回车换行符也作为字符串的一部分读到字符串中来。,读到回

    10、车换行符时将回车换行符也作为字符串的一部分读到字符串中来。函数函数fputs()的原型为:的原型为:int fputs(char*buf,FILE*fp);功能是将功能是将buf指向的字符串输出到指向的字符串输出到fp所指定的文件。所指定的文件。10.1.2 字符串的输入和输出字符串的输入和输出n【例例10.2】最牛微最牛微信。信。n请你编写程序测试上请你编写程序测试上述计算结果的正确性。述计算结果的正确性。/函数功能:将字符数组函数功能:将字符数组str中的字符串转换为英文字母对应的数字,然后累加求和并返回中的字符串转换为英文字母对应的数字,然后累加求和并返回int LetterSum(ch

    11、ar str)int i,sum=0;for(i=0;stri!=0;i+)if(stri=a&stri=A&stri=Z)sum+=stri-A+1;else return-1;return sum;#include int LetterSum(char str);int main(void)char a80;int sum;printf(Input a word:);gets(a);sum=LetterSum(a);if(sum!=-1)printf(%s=%d%n,a,sum);else printf(Input error!n);return 0;10.1.2 字符串的输入和输出字符串

    12、的输入和输出/函数功能:将字符数组函数功能:将字符数组str中的字符串转换为英文字母对应的数字,然后累加求和并返回中的字符串转换为英文字母对应的数字,然后累加求和并返回int LetterSum(char str)int i,sum=0;for(i=0;stri!=0;i+)if(islower(stri)sum+=stri-a+1;else if(isupper(stri)sum+=stri-A+1;else return-1;return sum;#include#include int LetterSum(char str);int main(void)char a80;int sum;

    13、printf(Input a word:);gets(a);sum=LetterSum(a);if(sum!=-1)printf(%s=%d%n,a,sum);else printf(Input error!n);return 0;10.1.2 字符串的输入和输出字符串的输入和输出/函数功能:将函数功能:将str指向的字符串转换为英文字母对应的编号数字,然后累加求和并返回指向的字符串转换为英文字母对应的编号数字,然后累加求和并返回int LetterSum(char*str)int sum=0;for(;*str!=0;str+)if(*str=a&*str=A&*str=Z)sum+=*st

    14、r-A+1;else return-1;return sum;#include int LetterSum(char*str);int main(void)char a80;int sum;printf(Input a word:);gets(a);sum=LetterSum(a);if(sum!=-1)printf(%s=%d%n,a,sum);else printf(Input error!n);return 0;10.1.2 字符串的输入和输出字符串的输入和输出10.1.4字符串处理函数字符串处理函数n#include strcpy(目的字符数组目的字符数组,源字符串源字符串);stri

    15、ng copystrlen(字符串字符串);string lengthstrcat(目的字符数组目的字符数组,源字符串源字符串);string combinationstrcmp(字符串字符串1,字符串字符串2);string comparisonn#include strlen(字符串字符串);char str10=China;printf(%d,strlen(str);问题:输出结果问题:输出结果是是 5,6,还是,还是10?不包括不包括0的实际字符的个数的实际字符的个数10.1.4字符串处理函数字符串处理函数len=strlen(str);for(i=0;ilen;i+)putchar(

    16、stri);putchar(n);for(i=0;stri!=0;i+)putchar(stri);putchar(n);用计算得到的字符串长度用计算得到的字符串长度控制字符串输出控制字符串输出用字符串结束标志(空字符)用字符串结束标志(空字符)控制字符串输出控制字符串输出#define STR_LEN 80char strSTR_LEN+1;10.1.4字符串处理函数字符串处理函数n#include strcpy(目的字符数组目的字符数组,源字符串源字符串);问题:字符串能否用赋值运算符(问题:字符串能否用赋值运算符(=)整体复制?)整体复制?str2=str1;strcpy(str2,st

    17、r1);注意复制方向!注意复制方向!str2须足够大!须足够大!strncpy(str2,str1,n);更安全!更安全!strcpy(str2,strcpy(str1,Hello);10.1.4字符串处理函数字符串处理函数n#include strcat(目的字符数组目的字符数组,源字符串源字符串);strcat(str2,str1);str2必须足够大!必须足够大!strncat(str2,str1,n);strcat(str2,strcat(str1,Hello);10.1.4字符串处理函数字符串处理函数n#include strcmp(字符串字符串1,字符串字符串2);问题:字符串能否

    18、用关系运算符问题:字符串能否用关系运算符,=直接比较大小直接比较大小?if(str2=str1)if(strcmp(str2,str1)=0)if(strncmp(str2,str1,n)=0)10.1.4字符串处理函数字符串处理函数问题:字符串问题:字符串是如何比较大小的?是如何比较大小的?当出现第一对不相等的字符时,就由当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,这两个字符决定所在字符串的大小,返回其返回其ASCII码比较的结果值(差值)码比较的结果值(差值)comparecomputer判断判断str1是否小于是否小于str2?if(strcmp(str1,str2)

    19、0)n#include strcmp(字符串字符串1,字符串字符串2);10.1.4字符串处理函数字符串处理函数10.1.4字符串处理函数字符串处理函数n【例例10.3】请自己编写一个字符串比较函数请自己编写一个字符串比较函数MyStrcmp(),输入一个密码,调用函数,输入一个密码,调用函数MyStrcmp()判断用户输入的密码是否正确,如果正确,则输出判断用户输入的密码是否正确,如果正确,则输出Welcome!n,如,如果不正确,则输出果不正确,则输出Sorry!n,直到用户输入正确为止。,直到用户输入正确为止。#include int MyStrcmp(const char s,cons

    20、t char t);int main(void)char password8=secret,input8;while(1)printf(Enter your password:);gets(input);if(MyStrcmp(input,password)=0)printf(Welcome!n);break;else printf(Sorry!n);return 0;/函数功能:采用字符数组做函数参数实现字符串比较函数功能:采用字符数组做函数参数实现字符串比较int MyStrcmp(const char s,const char t)int i;for(i=0;si=ti;i+)if(si

    21、=0)return 0;return si-ti;/函数功能:采用字符指针做函数参数实现字符串比较函数功能:采用字符指针做函数参数实现字符串比较int MyStrcmp(const char*p1,const char*p2)for(;*p1=*p2;p1+,p2+)if(*p1=0)return 0;return*p1-*p2;香港中文大学独立时代杂志,2014年“愿付雁书常思君微情书征文大赛”一等奖作品10.2 字符串的应用字符串的应用编程带你去看编程带你去看“诗和远方诗和远方”10.2.1 向函数传递字符串向函数传递字符串n【例例10.4】假设你进入了一个科幻世界,在那里科学家们发明了一

    22、种时光穿梭机,假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在,请你编写这样一个字符串逆序程序。,请你编写这样一个字符串逆序程序。#include#include#define N 20void Reverse(const char str,char reverse);int main(void)char inputN+1,reverseN+1;gets(input);Reverse(input,reverse);puts(reverse

    23、);return 0;/函数功能:采用字符数组做函数参数实现字符串逆序函数功能:采用字符数组做函数参数实现字符串逆序void Reverse(const char str,char reverse)int i;int len=strlen(str);/计算字符串计算字符串str的长度的长度 for(i=0;stri!=0;i+)reversei=strlen-i-1;reversei=0;10.2.1 向函数传递字符串向函数传递字符串n【例例10.4】假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,你只要能将字符串逆序

    24、过来,你就可以穿越回过去,让昨日重现、一如往昔。现在你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在,请你编写这样一个字符串逆序程序。,请你编写这样一个字符串逆序程序。#include#include#define N 20void Reverse(char str);int main(void)char inputN+1;gets(input);Reverse(input);puts(input);return 0;/函数功能:采用字符数组做函数参数实现字符串逆序函数功能:采用字符数组做函数参数实现字符串逆序void Reverse(char str)int len,

    25、i,j;char temp;len=strlen(str);for(i=0,j=len-1;ij;i+,j-)temp=stri;stri=strj;strj=temp;10.2.1 向函数传递字符串向函数传递字符串n【例例10.4】假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在,请你编写这样一个字符串逆序程序。,请你编写这样一个字符串逆序程序。#include#includ

    26、e#define N 20void Reverse(char str);int main(void)char inputN+1;gets(input);Reverse(input);puts(input);return 0;/函数功能:采用字符指针做函数参数实现字符串逆序函数功能:采用字符指针做函数参数实现字符串逆序void Reverse(char*p)int len;char temp,*pStart,*pEnd;len=strlen(p);for(pStart=p,pEnd=p+len-1;pStartpEnd;pStart+,pEnd-)temp=*pStart;*pStart=*pE

    27、nd;*pEnd=temp;n【例例10.5】苏东坡曾写过一首苏东坡曾写过一首回文诗回文诗题金山寺题金山寺,这首诗顺,这首诗顺读,读者仿佛看到了从读,读者仿佛看到了从月夜泛舟月夜泛舟到到江天破晓江天破晓的景致的景致n而反过来读,仿佛是一幅从而反过来读,仿佛是一幅从黎明晓日黎明晓日,到,到渔舟唱晚渔舟唱晚的画卷:的画卷:轻鸥数点千峰碧,水接云边四望遥。轻鸥数点千峰碧,水接云边四望遥。晴日晚霞红霭霭,晓天江树绿迢迢。晴日晚霞红霭霭,晓天江树绿迢迢。清波石眼泉当槛,小径松门寺对桥。清波石眼泉当槛,小径松门寺对桥。明月钓舟渔浦远,倾山雪浪暗随潮。明月钓舟渔浦远,倾山雪浪暗随潮。潮随暗浪雪山倾,远浦渔舟

    28、钓月明。潮随暗浪雪山倾,远浦渔舟钓月明。桥对寺门松径小,槛当泉眼石波清。桥对寺门松径小,槛当泉眼石波清。迢迢绿树江天晓,霭霭红霞晚日晴。迢迢绿树江天晓,霭霭红霞晚日晴。遥望四边云接水,碧峰千点数鸥轻。遥望四边云接水,碧峰千点数鸥轻。10.2.1 向函数传递字符串向函数传递字符串现在,请你编程从键盘任意输入一个字符串,现在,请你编程从键盘任意输入一个字符串,判断这个字符串是否是回文。如果是回文,则判断这个字符串是否是回文。如果是回文,则输出输出Yes!,否则输出,否则输出No!。10.2.1 向函数传递字符串向函数传递字符串#include#include#include#define N 80

    29、bool IsPlalindrome(const char str);int main(void)char aN;printf(Input a string:);gets(a);if(IsPlalindrome(a)printf(Yesn);else printf(Non);return 0;/函数功能:判断回文字符串函数功能:判断回文字符串bool IsPlalindrome(const char str)int i,j;for(i=0,j=strlen(str)-1;ij;i+,j-)if(stri!=strj)return false;return true;10.2.1 向函数传递字符

    30、串向函数传递字符串#include#include#include#define N 80bool IsPlalindrome(const char str);void Reverse(const char str,char reverse);int main(void)char aN;printf(Input a string:);gets(a);if(IsPlalindrome(a)printf(Yesn);else printf(Non);return 0;/函数功能:判断回文字符串函数功能:判断回文字符串bool IsPlalindrome(const char str)char re

    31、vN;Reverse(str,rev);return strcmp(str,rev)=0?true:false;/函数功能:采用字符数组做函数参数实现字符串逆序函数功能:采用字符数组做函数参数实现字符串逆序void Reverse(const char str,char reverse)int i;int len=strlen(str);/计算字符串计算字符串str的长度的长度 for(i=0;stri!=0;i+)reversei=strlen-i-1;reversei=0;10.2.1 向函数传递字符串向函数传递字符串#include#include#include#define N 80

    32、bool IsPlalindrome(const char str);void Reverse(char str);int main(void)char aN;printf(Input a string:);gets(a);if(IsPlalindrome(a)printf(Yesn);else printf(Non);return 0;/函数功能:判断回文字符串函数功能:判断回文字符串bool IsPlalindrome(const char str)char revN;strcpy(rev,str);Reverse(rev);return strcmp(str,rev)=0?true:fa

    33、lse;/函数功能:采用字符数组做函数参数实现字符串逆序函数功能:采用字符数组做函数参数实现字符串逆序void Reverse(char str)int len,i,j;char temp;len=strlen(str);for(i=0,j=len-1;ij;i+,j-)temp=stri;stri=strj;strj=temp;请输入藏头诗:请输入藏头诗:一一叶轻舟向东流叶轻舟向东流 帆帆梢轻握杨柳手梢轻握杨柳手 风风纤碧波微起舞纤碧波微起舞 顺顺水任从雅客悠水任从雅客悠 一一 帆帆 风风 顺顺 10.2.2 从函数返回字符串从函数返回字符串破解藏头诗破解藏头诗n【例【例10.610.6】编

    34、程破解用户从键盘输入的一首编程破解用户从键盘输入的一首4 4句的藏头诗句的藏头诗10.2.2 从函数返回字符串从函数返回字符串破解藏头诗破解藏头诗n【例【例10.610.6】编程破解用户从键盘输入的一首编程破解用户从键盘输入的一首4 4句的藏头诗句的藏头诗#include#define N 20void GetFirst(char sN,char t);int main(void)char s4N,tN;printf(请输入藏头诗:请输入藏头诗:n);for(int i=0;i4;i+)scanf(%s,si);GetFirst(s,t);puts(t);return 0;void GetFi

    35、rst(char sN,char t)for(int i=0;i4;i+)t2*i=si0;/汉字首字节汉字首字节 t2*i+1=si1;/汉字末字节汉字末字节 t2*i=0;/很重要很重要10.2.2 从函数返回字符串从函数返回字符串破解藏头诗破解藏头诗n【例【例10.610.6】编程破解用户从键盘输入的一首编程破解用户从键盘输入的一首4 4句的藏头诗句的藏头诗#include#define N 20char*GetFirst(char sN,char t);int main(void)char s4N,tN;printf(请输入藏头诗:请输入藏头诗:n);for(int i=0;i4;i+

    36、)scanf(%s,si);puts(GetFirst(s,t);return 0;char*GetFirst(char sN,char t)for(int i=0;i4;i+)t2*i=si0;t2*i+1=si1;t2*i=0;return t;10.2.3 错误实例分析错误实例分析n【例例10.710.7】下面的字符串连接程序存在错误,请分析错误的原因。下面的字符串连接程序存在错误,请分析错误的原因。#include#include char*MyStrcat(char*dest,char*source);int main(void)char*first=Hello;char *seco

    37、nd=xWorld;char *result;result=MyStrcat(first,second);printf(The result is:%sn,result);return 0;/函数功能:将字符串函数功能:将字符串source连接到字符串连接到字符串dest后后char*MyStrcat(char*dest,char*source)for(int i=0;istrlen(source)+1;i+)*(dest+strlen(dest)+i)=*(source+i);return dest;10.2.3 错误实例分析错误实例分析n【例例10.710.7】下面的字符串连接程序存在错误

    38、,请分析错误的原因。下面的字符串连接程序存在错误,请分析错误的原因。/函数功能:将字符串函数功能:将字符串source连接到字符串连接到字符串dest后后char*MyStrcat(char*dest,char*source)for(int i=0;istrlen(source)+1;i+)*(dest+strlen(dest)+i)=*(source+i);return dest;10.2.3 错误实例分析错误实例分析n【例例10.710.7】下面的字符串连接程序存在错误,请分析错误的原因。下面的字符串连接程序存在错误,请分析错误的原因。char*MyStrcat(char*dest,cha

    39、r*source)int destLen=strlen(dest);for(int i=0;istrlen(source)+1;i+)*(dest+destLen+i)=*(source+i);return dest;char*MyStrcat(char*dest,char*source)char*pStr=dest;/保存字符串保存字符串dest的首的首地址地址while(*dest!=0)dest+;for(;*source!=0;dest+,source+)*dest=*source;*dest=0;return pStr;10.3 指针数组及其应用指针数组及其应用n本节主要讨论如下问题

    40、:本节主要讨论如下问题:n(1 1)如何理解指针和二维数组之间的关系?)如何理解指针和二维数组之间的关系?n(2 2)何为指针数组?指针数组和指向数组的指针有什么不同?)何为指针数组?指针数组和指向数组的指针有什么不同?n(3 3)字符指针数组在字符串处理中有什么用?)字符指针数组在字符串处理中有什么用?10.3.1 指针和二维数组间的关系指针和二维数组间的关系以扑克牌为例以扑克牌为例n1.1.二维数组的行地址和列地址的概念二维数组的行地址和列地址的概念10.3.1 指针和二维数组间的关系指针和二维数组间的关系以扑克牌为例以扑克牌为例n2.2.二维数组的列指针的定义和初始化二维数组的列指针的定

    41、义和初始化n若要让一个指针指向它,则应定义为若要让一个指针指向它,则应定义为/,基类型是,基类型是int型型/*(a+0)+0即即,指向指向第第0行第行第0列列的的int型型元素元素10.3.2 字符指针数组和二维字符数组字符指针数组和二维字符数组n字符指针数组字符指针数组表示的星期表表示的星期表l每个元素都是一个字符串指针,每个指针指向一个常量字符串,节省存储空间每个元素都是一个字符串指针,每个指针指向一个常量字符串,节省存储空间char*weekDays=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;printf(%sn,

    42、weekDaysi);puts(weekDaysi);10.3.2 字符指针数组和二维字符数组字符指针数组和二维字符数组n用数组作为指针的基类型用数组作为指针的基类型指向数组的指向数组的指针指针例如:例如:int(*pStr)5;n用指针作数组的基类型用指针作数组的基类型指针指针数组数组(Pointer Array)元素为指针类型的数组元素为指针类型的数组n定义形式为:定义形式为:数据类型数据类型 *数组名数组名数组长度数组长度;例如:例如:char*pStr5;【例例10.8】2021年年5月月22日日10时时40分,分,“祝融号祝融号”火星车成功驶离着陆平台,到达火星表面,火星车成功驶离着

    43、陆平台,到达火星表面,开始巡视探测。从后避障相机拍摄到的两道车轴痕,都是人类为迈向宇宙而努力的蹒跚之路,开始巡视探测。从后避障相机拍摄到的两道车轴痕,都是人类为迈向宇宙而努力的蹒跚之路,稚嫩、跌跌撞撞却又生机勃勃无比坚定的启程之路稚嫩、跌跌撞撞却又生机勃勃无比坚定的启程之路。1970年年4月月24日第一颗人造地球卫星日第一颗人造地球卫星“东东方红方红-1”号的成功发射是中国航天器发展史上的第一个里程碑,号的成功发射是中国航天器发展史上的第一个里程碑,“神神舟舟-5”号载人宇宙飞船号载人宇宙飞船的成功发射则是第二个里程碑。近年来,中国航天事业一直受到关注,除了独立自主的尖端的成功发射则是第二个里

    44、程碑。近年来,中国航天事业一直受到关注,除了独立自主的尖端技术,航天器的名字也很吸人眼球技术,航天器的名字也很吸人眼球。2004年,探月工程被命名为年,探月工程被命名为“嫦娥工程嫦娥工程”;2011年,我年,我国第一个目标飞行器命名为国第一个目标飞行器命名为“天宫一号天宫一号”;2020年,年,“北斗三号北斗三号”全球卫星导航系统正式开全球卫星导航系统正式开通,我国首次火星探测任务正式启动,任务命名通,我国首次火星探测任务正式启动,任务命名“天问一号天问一号”,出自屈原的天问,出自屈原的天问。从神舟到鹊桥,从墨子到祝融,我国航天器的名字不仅充满诗意,相互之间更有着紧密联系,从神舟到鹊桥,从墨子

    45、到祝融,我国航天器的名字不仅充满诗意,相互之间更有着紧密联系,这些标志着中国航天人奋斗史的大国重器,被一个个源自中国传统神话的名字刻下了浪漫的这些标志着中国航天人奋斗史的大国重器,被一个个源自中国传统神话的名字刻下了浪漫的符号,不仅体现着符号,不仅体现着中华中华民族连绵不断的文化底蕴,更见证着中国人一步步实现飞天梦想的光民族连绵不断的文化底蕴,更见证着中国人一步步实现飞天梦想的光荣历程。荣历程。假设现在假设现在有有n(1=n=10)个航天器,它们的名字均为长度个航天器,它们的名字均为长度小于小于等于等于20的字符串,请按字典序输出这些它们的名字。的字符串,请按字典序输出这些它们的名字。10.3

    46、.2 字符指针数组和二维字符数组字符指针数组和二维字符数组10.3.2 字符指针数组和二维字符数组字符指针数组和二维字符数组#include#include#define MAX_LEN 20 /字符串最大长度字符串最大长度#define N 150 /字符串个数字符串个数void Input(char strMAX_LEN,int n);void StrSort(char strMAX_LEN,int n);void Output(char strMAX_LEN,int n);int main(void)int n;char nameNMAX_LEN;/定义二维字符数组定义二维字符数组 pr

    47、intf(How many strings?);scanf(%d,&n);getchar();/读走输入缓冲区中的回车符读走输入缓冲区中的回车符 printf(Input their names:n);Input(name,n);StrSort(name,n);/字符串按字典顺序排序字符串按字典顺序排序 printf(Sorted results:n);Output(name,n);return 0;10.3.2 字符指针数组和二维字符数组字符指针数组和二维字符数组void Input(char strMAX_LEN,int n)for(int i=0;in;i+)gets(stri);voi

    48、d Output(char strMAX_LEN,int n)for(int i=0;in;i+)puts(stri);/函数功能:用二维字符数组做函数参数,交换法实函数功能:用二维字符数组做函数参数,交换法实现字符串按字典顺序排序现字符串按字典顺序排序void StrSort(char strMAX_LEN,int n)char tempMAX_LEN;for(int i=0;in-1;i+)for(int j=i+1;jn;j+)if(strcmp(strj,stri)0)strcpy(temp,stri);strcpy(stri,strj);strcpy(strj,temp);10.3.

    49、2 字符指针数组和二维字符数组字符指针数组和二维字符数组#include#include#define MAX_LEN 20 /字符串最大长度字符串最大长度#define N 150 /字符串个数字符串个数void Input(char*pStr,int n);void StrSort(char*pStr,int n);void Output(char*pStr,int n);int main(void)int n;char nameNMAX_LEN;/定义二维字符数组定义二维字符数组 char*pStrN;/定义字符指针数组定义字符指针数组 printf(How many strings?)

    50、;scanf(%d,&n);getchar();/读走输入缓冲区中的回车符读走输入缓冲区中的回车符 printf(Input their names:n);for(int i=0;in;i+)pStri=namei;/让让pStri指向二维字符数组指向二维字符数组name的第的第i行行 Input(pStr,n);StrSort(pStr,n);/字符串按字典顺序排序字符串按字典顺序排序 printf(Sorted results:n);Output(pStr,n);return 0;10.3.2 字符指针数组和二维字符数组字符指针数组和二维字符数组/函数功能:用字符指针数组做函数参数,按交换

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第10章 字符串和文本处理.ppt
    链接地址:https://www.163wenku.com/p-5819390.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库