C课件语言第09讲

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例 char s3[8]={’s’,’t’,’r’,’i’,’n’,’g’,’!’,’\0’}; char s4[8]={"string!"}; char s5[8]="string!";
存储形式为:
s t r i n g ! \0
说明:
•C语言中,规定了一个“字符串结束标记”,以字 也是合法的
15.03.2021
Page 6
Program Design in C Language
9.2.3 字符数组的定义、初始化和引用 2)给部分元素赋初值:
例:char s1[9]={’C’,’h’,’i’,’n’,’a’,’!’}; char s2[9]={’C’,’h’,’i’,’n’,’a’,’!’,’\0’}; char s3[9]={”China!”}; char s4[9]= “China!”;
字符串后,系统自动在字符串后加上一个字符
串结束标志’\0’。
15.03.2021
Page 21
9.4 字符串函数
Program Design in C Language
注意:
1. 函数gets( )只能一次输入一个字符串。
例:char str[10]; int i; for ( i=0; i<9; i++ ) scanf("%c",&str[i]); for ( i=0; i<9; i++ ) printf("%c", str[i]);
15.03.2021
Page 9
9.2.4 字符数组的输入输出
Program Design in C Language
程序运行结果:
String str1 = Hello World!
{ char str1[15]="Hello ", str2[ ]="World!";
strlink(str1, str2);
printf("String str1 = %s\n", str1);
}
void strlink(char *s, char *t)
scanf函数参数要求的是地址,故直接用字符数 组名进行操作。
字符数组名表示的是该数组的首地址,因此使
用格式符%s可以实现字符串整体的输入和输出。
scanf函数虽然给多个字符的输入提供了简便的 方法,但对于有空格的字符串的输入却有限制。
15.03.2021
Page 11
Program Design in C Language
程序运行结果:
String str2 = Copy string
char str1[ ]="Copy string", str2[30];
char *p1=str1, *p2=str2;
while(*p1!='\0') *p2++=*p1++;
*p2='\0';
printf("String str2 = ");
9.3 字符串指针变量与字符数组
➢字符串指针变量占用的内存要少于字符数组。 例如,编译系统为下面二维字符数组的定义及初始 化分配了36个字节的内存空间: char str[2][18] = {"Hello", "Welcome to China!"}; 为下面两个字符串指针变量的定义及初始化分配了 28个字节的内存空间: char *str1 = "Hello", *str2 = "Welcome to China";
15.03.2021
Page 2
Program Design in C Language
9.2.2 字符数组的定义、初始化和引用
•在字符数组中,每一个元素只能存放一个字符。
•二维字符数组,可以看作是一个字符串数组。
例: char
char
a[10],b[30]; s[10][20],h[20][100];
Program Design in C Language
利用字符串输入输出函数
C语言要求在使用字符串函数时,要包含头文件 stdio.h
1、字符串输入函数gets( );
作用:是将一个字符串输入到字符数组中,当遇 到第一个回车时结束输入
格式:gets(字符数组名);
gets( )函数同scanf( )函数一样,在读入一个
15.03.2021
Page 5
Program Design in C Language
9.2.3 字符数组的定义、初始化和引用
•‘\0’代表ASCII码为0的字符,是一个空操作符,表示什 么也不干。
•字符串在实际存储时,系统会自动的在其尾部添加一个 结束标志’\0’。
•在字符数组中,并不要求它最后的一个字符为“\0”, 也可以没有“\0”。
{ while(*s!='\0') s++; /* 使s指向字符串str1的末尾 */
while(*t!='\0') *s++=*t++; /* 将str2中的字符逐个连接到str1的末尾 */
*s='\0'; /* 在str1的末尾加上字符串结束标志 */
}
15.03.2021
Page 20
9.4 字符串函数
15.03.2021
Page 13
Program Design in C Language
9.3 字符串指针变量的定义与引用
➢字符串指针变量的定义和初始化 ✓方式二:在程序中定义一个字符串指针变量, 并将字符串的首地址直接赋给它,然后通过移 动指针变量来访问字符串的其他字符。 例如:
char *p = "Welcome to China!"; 等价于:
➢字符串指针变量的值是可以改变的,而字符数组的 数组名永远代表该数组的首地址,它的值是不会变 化的。
15.03.2021
Page 17
9.3 字符串指针变量与字符数组
Program Design in C Language
例 将字符串str1复制到字符串str2
#include <stdio.h> void main( ) {
存储形式为:
C h i n a ! \0 \0 \0
15.03.2021
Page 7
Program Design in C Language
9.2.3 字符数组的定义、初始化和引用 2、二维字符数组初始化
二维字符串数组的初始化,可以采用二维字符数组初始 化形式或者字符串初始化形式
例: char name[2][10]={{’J’,’o’,’h’,’n’,’\0’}, {’M’,’a’,’r’,’r’,’y’,’\0’}};
15.03.2021
Page 19
Program Design in C Language
9.3 字符串指针变量作为函数参数
例 连接两个字符串str1和str2,连接结果放在str1中
#include <stdio.h> void strlink(char *, char *); void main( )
printf("\n");
}
15.03.2021
Page 15
Program Design in C Language
9.3 字符串指针变量与字符数组
➢字符数组是由若干个元素组成,每个元素存放一 个字符;而字符串指针变量存放的是字符串中某 一个字符的地址。
➢赋值方式不同。字符数组只能对各个元素分别赋 值,而字符串指针变量只用赋给字符串的首地址 就可以了。 例如,下面的赋值是正确的:
程序运行结果:
Welcome to China!
{
Welcome to China!
char *str = "Welcome to China!"; printf("%s\n", str); /*整体引用字符串*/
for ( ; *str!='\0'; str++ ) printf("%c", *str); /*逐个引用字符串中的字符*/
2.利用格式符%s,可以一次输入、输出字符串。
%s:遇第一个空白符(空格、Tab、回车)结束输入,
遇第一个‘\0’结束输出。
例: char str[10]; scanf("%s",str ); printf("%s\n", str );
15.03.2021
输入:program 输出:program
Page 10
15.03.2021
Page 12
Program Design in C Language
9.3 字符串指针变量的定义与引用
➢字符串指针变量的定义和初始化 ✓方式一:将存放字符串的字符数组名赋给字符 串指针变量,让字符串指针变量指向字符串的 首字符,然后通过移动指针变量来访问字符串 的其他字符。 例如: char str[ ] = "Welcome to China!"; char *p; p = str; /* 等价于 p = &str[0] */
9.2.4 字符数组的输入输出
Program Design in C Language
例: char s1[10], s2[15];
scanf("%s%s",s1,s2 );
printf("%s %s\n", s1,s2 );
注意:
输入:program C 输出:program C
输入:How are you 输出:How are
char *p; p = "Welcome to China!"; 这里的字符串指针变量p指向字符串的首字符, 即第一个字符'W'。
15.03.2021
Page 14
Program Design in C Language
9.3 字符串指针变量的定义与引用
例 用字符串指针变量实现字符串操作
#include <stdio.h> void main( )
puts(str2);
}
15.03.2021
Page 18
Program Design in C Language
9.3 字符串指针变量作为函数参数
特点:
➢ 用字符数组名或字符串指针变量名作为实参, 向形参传递字符串的首地址;
➢ 作为形参的字符数组或字符串指针变量本质上 都是字符串指针变量;
➢ 在被调用函数中可以改变字符串的内容,在主 调函数中可以得到改变以后的字符串。
9.3 字符串指针变量的定义与引用
➢ 字符串常量的处理是用字符数组来实现的。也 就是说,无论是否定义了字符数组,对于程序 中出现的字符串,系统都会在内存中开辟一个 字符数组连续存储空间来存放该字符串常量。
➢ 字符串的指针:字符串的首字符地址,也就是 存放字符串的字符数组的首地址。
➢ 字符串指针变量:通常把char型指针变量称为 字符串指针变量。也就是说,指向字符串的指 针变量等同于指向字符数组元素的指针变量, 可以指向字符串中的任意一个字符。
15.03.2021
Page 3
Program Design in C Language
9.2.3 字符数组的定义、初始化和引用
二、字符数组的初始化
1、一维字符数组初始化
字符数组的赋值要符合数组的要求,除了在定义时 初始化可以用字符串赋初值,其余只能一个元素一个元 素地赋值。
1)给所有元素赋初值:
char *str; str = "Welcome to China!"; /*str是指针变量*/ 下面的赋值是错误的:
char str[30]; str = "Welcome to China!"; /*str是数组名*/
15.03.2021
Page 16
Program Design in C Language
例 char s1[7]={‘s’,’t’,’r’,’i’,’n’,’g’,’!’};
char s2[ ]={‘s’,’t’,’r’,’i’,’n’,’g’,’!’};
存储形式为: s t r i n g !
15.03.2021
Page 4
Program Design in C Language
9.2.3 字符数组的定义、初始化和引用
char name[2][10]={{”John”},{”Marry”}};
char name[2][10]={”John”,”Marry”}; 这三种方法效果一样。
15.03.2021
Page 8
9.2.4 字符数组的输入输出
Program Design in C Language
1.利用格式符%c逐个输入、输出字符:
C课件语言第09讲
Program Design in C Language
9.2.1 字符数组的定义、初始化和引用
一、字符数组的定义
字符数组:用来存放字符型数据的数组。
格式: char 数组名[常量表达式],···; char 数组名[常量表达式1][常量表达式2],···
注意:
•字符数组的定义、引用、初始化遵循 “数组” 的规定。
相关文档
最新文档