C语言程序设计 重庆大学课件 第07章 字符串及其应用_图文

搜试试 7 悬赏文档
广告

C语言程序设计 重庆大学课件 第07章 字符串及其应用_工学_高等教育_教育专区

暂无评价|0人阅读|0次下载|举报文档

C语言程序设计 重庆大学课件 第07章 字符串及其应用_工学_高等教育_教育专区。重庆大学 C语言程序设计课件


程序设计技术 ? ? ? ? ? ? ? ? ? ? C语言数据描述和C程序设计初步 结构化程序设计基础和C语言的控制结构 数组及其应用 函数与C程序结构 指针与函数 指针与数组 字符串及其应用 结构体类型和联合体类型 C语言的文件处理及其应用 位运算与枚举类型 字符串及其应用 ? ? C语言的字符串表示方法 字符串的常用处理方法及标准库函数 7.1.1 ? 字符串表示方法 字符数组 C语言只有字符串常量,没有字符串变量,对字 符串的处理是使用字符数组实现。用于存放每一 个字符数据的数组称为字符数组。 字符数组的定义:char 数组名[长度] 注意:存放字符串时要使用空字符’\0?作为字符 串的结束符号,所以定义字符数组时,应使字符 数组长度大于或等于字符串长度加1。 例如: char str[7]=”abcd” a b c d \0 \0 \0 str 数组名str 是地址常量 图7.2 数组名与其初始化值之间的对应关系 7.1.1 字符串表示方法 ? 指向字符变量的指针(串指针) 定义字符指针变量,并将字符串或字符串常 量的首地址赋给该指针变量。即字符指针变量 指向一个字符串。 例如: char *sPtr=“abcd”; sPtr=“1234”; 首先在系统内存中分配一段连续的存储区域 并存放指定的字符串常量,然后将该存储区域 的起始地址(字符串常量的首地址)赋值给字 符指针变量sPtr。 赋值语句sPtr=”1234”;使指针变量sPtr由指 向字符串”abcd”改为指向字符串”1234”。 7.1.1 字符串表示方法 a b c d \0 a b c d \0 sPtr a) 指针变量指向字符串常量 a b c d \0 1 2 3 4 \0 sPtr b) 指针变量改变原指向指向另一字符串 图7.1 指针变量与字符串数据对象的关系示意图 7.1.1 字符串表示方法 ? 字符数组的初始化 ? 使用单个字符常量 字符数组与字符指针的区别 char s2[9]={?H?, ?e', 'a', 'd '}; char s3[]={'N', 'e', 'w', ' ', 'Y', 'e', 'a', 'r'}; char s1[10],*s2; char s1[]=“abcd”; ? 使用字符串常量 char *s2=“abcd”; s1=“abcd”; X 比较 系统自动在字符串的结尾加上结束符号’\0?,但仍需注 s2=“abcd”; 意数组长度的问题。 C语言还允许初始化一维字符数组时不使用花括号括住 char s1[10],*s2; char *s2; 字符串常量。 gets(s1); s2=(char *)malloc(10); char s1[80]={ "New Year"}; 比较 gets(s2); gets(s2); X char s2[80]= "New Year"; char s3[]="New Year"; /此时字符数组的长度为9 7.1.2 字符串的输入输出 ? 使用scanf、printf函数 ? 使用格式控制符%c可以通过单个字符方式输入输出字 符数组。(char a[7],b[8],c[5];) for (i=0;i<6;i++) scanf(“%c”,&a[i]); for (i=0;i<6;i++) printf(“%c”,a[i]); ? 使用格式控制符%s可以将整个字符串一次输入输出, 并且一次可以输入输出多个字符串。 (函数参数为字符数组名或串指针) scanf(“%s”,a); printf(“%s”,a); /*整体输入一个字符串*/ /*整体输出一个字符串*/ ? 使用gets、puts函数 (函数参数为字符数组名或串指针) 使用gets和puts函数一次可以输入输出一个字符串。 7.1.2 字符串的输入输出 ? Scanf和gets函数的区别 ? 一次调用能够输入的字符串个数不同 gets(str); /*输入1个字符串*/ scanf(“%s%s%s”,a,b,c);/*输入多个字符串(空格分 隔)*/ ? 空格字符的处理不同 gets 输入字符串中可含有空格字符。 scanf 输入字符串中不能含空格字符。 一次调用能够输出的字符串个数不同 puts(str1) /*输出1个字符串*/ printf(“%s\n%s”,str1,str2); /*输出多个字符串*/ ? printf和puts函数的区别 ? ? 输出数据换行处理方式不同 puts函数 输出字符串后会自动换行; printf函数 输出字符串后不自动换行; 7.1.2 字符串的输入输出 例7-2 将字符串中小写字母转变成大写字母 #include <stdio.h> void main() { char string[100],*p; printf("Please input a string:"); gets(string); *p *p p=string; string a b c d e f g \0 AB while(*p!='\0') { if(*p>='a' &&*p<='z') *p-=32; p++; } printf("The new string is: "); 例7-1 程序演示 puts(string); } 字符串及其应用 ? ? C语言的字符串表示方法 字符串的常用处理方法及标准库函数 字符串的常用处理方法及标准库函数 ? ? ? ? ? ? ? ? 字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组 7.2.1 字符串中有效字符的统计 ? 测试字符串的长度 统计字符串中包含的有效字符个数。即从字符串 的第一个字符开始,依次向后判断该字符是否字 符串结束符’\0’,若不是则予以统计,直到遇 到’\0?为止。 ? 标准测试字符串长度函数strlen 函数原型:在<string.h>中 size_t strlen(const char *string) 其中:size_t表示整型数据类型 函数调用:strlen(str); 功能:测试str的字符串长度。返回值为字符串 的实际长度,不包括结束字符’\0?。 7.2.1 字符串中有效字符的统计 例7-3 编制求字符串长度函数并用主函数进行测试 数组方式统计字符串长度 指针方式统计字符串长度 int strlength(char s[]) int strlength(char *s) { int i; { int i=0; *s!=?\0? for(i=0;s[i]!='\0';i++) while(*s) ; i++,s++; return i; return i; 移动指针 } } 7.2.1 字符串中有效字符的统计 例7-5 编程序实现功能:判断输入字符串是否回文。 回文:左读或右读都相同。如:level是回文。 for(;head<end;head++,end--) if(*head!=*end) { flag=0; break; } if(flag) printf("%s是回文!",word); else printf("%s不是回文!",word); word a b c d e \0 l e v e l \0 head end head end 字符串的常用处理方法及标准库函数 ? ? ? ? ? ? ? ? 字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组 7.2.2 字符串的复制 ? 标准字符串复制函数strcpy 函数原型:在<string.h>中 char *strcpy(char *strDestination,const *strSource) 函数调用:strcpy(str1,str2); 功能:将字符串str2拷贝到字符串str1中, 函数返回字符串str1。其中,字符数组str1 必须定义足够大,str2可以是字符串常量。 例7-7 使用标准函数strcpy实现字符串的拷贝 7.2.2 字符串的复制 例7-6 编制字符串复制函数并用相应主函数测试 字符数组方式实现字符串拷贝 void strcopy(char s[],char t[]) { int i; for(i=0;t[i]!='\0';i++) s[i]=t[i]; s[i]='\0'; } 7.2.2 字符串的复制 t t s1 指针方式实现字符串拷贝 char *strcopy(char *s,char *t) a 保存s的首地址到p { char *p=s; while((*s++=*t++)!='\0') ; *t的’\0?先赋给*s a return p; 再判断是否等于’\0? } s2 t b c d e \0 b c d e \0 p s s s 7.2.2 字符串的复制 使用标准字符串复制函数的注意点 ① 字符串复制函数使用的字符数组形参 本质上是一个指针量,对应的实参必 须是地址量。 ② 可以将实参字符数组(字符串)的部分 提供给形参数组共享。 ③ 字符串存储时,系统会自动添加字符 串结束符’\0?,程序处理字符串时,只 需指出开始位置。 ? 7.2.2 字符串的复制 例7-8 编程将源字符串从指定位置拷贝到目标字符串 S1+2 (&s1[2]) #include <stdio.h> s1 #include <string.h> void main() a b c d e \0 { char s1[80],s2[80]; int pos; printf("Input the string s1:"); c d e \0 gets(s1); printf("Input the pos: "); s2 2 scanf("%d",&pos); 2 strcpy(s2,&s1[pos]); /strcpy(s2,s1+pos); puts(s2);} 7.2.2 字符串的复制 void main() Len=6 s { char s[100]; int start,len,length; a b c m e f \0 e f \0 d n k d gets(s); 3 scanf("%d",&start); S+3 S+6 3 scanf("%d",&length); len=strlen(&s[start]); if(len<length) strcpy(s+start,s+strlen(s)); 例7-9 程序演示 else 3 6 strcpy(s+start,s+start+length); puts(s);} 字符串的常用处理方法及标准库函数 ? ? ? ? ? ? ? ? 字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组 7.2.3 字符串的连接 ? 字符串连接的基本思想 首先找到目标字符串的结尾处,然后从源字符串的 第一个字符开始依次取出每一个有效字符赋值到指 定目标位置,直到源字符串的字符处理完为止。 ? 标准字符串连接函数strcat 函数原型: char *strcat(char *strDestination, char*strSource); 函数调用:strcat(str1,str2); 功能:将字符串str2连接到字符串str1的后面生成新 的字符串str1,函数返回字符串str1。字符数组长度应 足够大(大于strlen(str1)+strlen(str2))。 7.2.3 字符串的连接 例7-10 编制字符串连接函数并用主函数测试 指针方式实现字符串连接 s s char *strjoin(char *s,char *t) s1 { char *p1=s; while(*s) a b c d \0 2 3 4 1 保存s的首地址到p1 s++; while((*s++=*t++)!='\0') p1 1 2 3 4 ; return p1; s2 } 例7-12 编程将源字符串从指定位置连接到目标字符串 t s \0 \0 t 字符串的常用处理方法及标准库函数 ? ? ? ? ? ? ? ? 字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中

(转载请注明出处和本文链接)
+1
0人
热门文章