第10章字符串 10.1用一个一维字符数组来存放字符串 102使指针指向一个字符串 10.3字符串的输入和输出 104字符串数组 10.5用于字符串处理的函数 106程序举例
第10章 字符串 10.1 用一个一维字符数组来存放字符串 10.2 使指针指向一个字符串 10.3 字符串的输入和输出 10.4 字符串数组 10.5 用于字符串处理的函数 10.6 程序举例
10.1用一个一维字符数组来存放字符串 、字符串及其存储方法: 1、定义:字符串是指若干有效字符的序列。 ★有效字符:是指系统允许使用的字符,包括 字母、数字、专用字符、转义字符等。 例:“ China”,“a+b=c”,“%dm”; C语言规定:以“0字符作为字符串的结束 标志。“0的ASCI码为0,称为“空值”。 注意:在C语言中,没有字符串变量; 字符串是存放在一个字符型数组中。 字符串常量不需在其末尾加“\0,并被 处理成以‘0结尾的无名字符型一维数组
10.1 用一个一维字符数组来存放字符串 一、字符串及其存储方法: 1、 定义:字符串是指若干有效字符的序列。 ★ 有效字符:是指系统允许使用的字符,包括 字母、数字、专用字符、转义字符等。 例: “China”, “a+b=c”, “%d\n”; C语言规定:以‘\0’字符作为字符串的结束 标志。 ‘\0’的ASCII码为0,称为“空值” 。 注意:在C语言中,没有字符串变量; 字符串是存放在一个字符型数组中。 字符串常量不需在其末尾加‘\0’,并被 处理成以‘\0’结尾的无名字符型一维数组
2、字符串在字符数组中的存储方式: (1)单个元素赋值的方法; (2)字符串的整体处理 3、字符串的存储方式示意图: c[o] C C[O] c[1 C[1] h C[2] C[2] i C[3] C[3]n C[4] C[4] C[5 c5]V0 c[6] C[6] C[7] C[7] 4、字符串与字符数组的关系: ★字符串存放在字符数组中,但字符数组和字符 串可以不等长; ★字符串以“10”作为结束标记
2、字符串在字符数组中的存储方式: (1)单个元素赋值的方法; (2)字符串的整体处理。 3、 字符串的存储方式示意图: 4、 字符串与字符数组的关系: ★ 字符串存放在字符数组中,但字符数组和字符 串可以不等长; ★ 字符串以“\0”作为结束标记。 C h i a n C[1] C[2] C[0] C[4] C[6] C[3] C[5] C[7] C h i a n C[1] C[2] C[0] C[4] C[6] C[3] C[5] C[7] \0
10.1.1通过赋初值的方式给一维字符数组赋字符 串 1、逐个地为数组中各元素指定初值字符。 char c={C,h’,i’,n’,’a,”0}; 2、对一个字符数组指定一个字符串初值。 char cl={“ China”} char c13=“ Computer&C”; 注意:(1)系统会自动在最后一个字符后面加 0作为结束标记 (2)字符数组的长度至少应为字符的个数加1
10.1.1 通过赋初值的方式给一维字符数组赋字符 串 1、 逐个地为数组中各元素指定初值字符。 char c[]={‘C’,’h’,’i’,’n’,’a’,’\0’}; 2、对一个字符数组指定一个字符串初值。 char c[]={“China”}; char c[13]=“Computer & C”; 注意: (1)系统会自动在最后一个字符后面加 一‘\0’作为结束标记。 (2)字符数组的长度至少应为字符的个数加1
10.12在C程序执行过程中给一维字符数 组赋字符串 1、不可以用赋值语句给字符数组整体赋一串字符 因为数组名是一个地址常量,不可重新赋值 2、给数组元素逐个赋字符值,最后人为加入串结 束标志“0°。 例: char mark0; int for(i=0;<9;i++) scant(“%oc”,& marki mark]=0;
10.1.2 在C程序执行过程中给一维字符数 组赋字符串 1、 不可以用赋值语句给字符数组整体赋一串字符 因为数组名是一个地址常量,不可重新赋值。 2、给数组元素逐个赋字符值,最后人为加入串结 束标志‘\0’ 。 例: char mark[10]; int i; for(i=0 ;i<9;i++) scanf(“%c”,&mark[i]); mark[i]=‘\0’;
10.2使指针指向一个字符串 1、字符串是存放在字符数组中的,因此可通过指针来访问: 用字符指针指向一个字符串 注意:(1)可以不定义数组,而直接用一个指针变量指向 个字符串常量。 例:char*p=“ C Language”; (2)p是指向字符串的地址,是一指针变量,只能说将 字符串的地址赋给p;而不能说将字符串中的字 符赋给了p (3)字符串指针在未赋值以前,其指向是不确定的。 2、用字符数组作为字符串和用指针指向的一个字符串的区别 见P146图示
10.2 使指针指向一个字符串 1、字符串是存放在字符数组中的,因此可通过指针来访问: 用字符指针指向一个字符串 注意:(1)可以不定义数组,而直接用一个指针变量指向 一个字符串常量。 例: char *p=“C Language”; (2)p是指向字符串的地址,是一指针变量,只能说将 字符串的地址赋给p;而不能说将字符串中的字 符赋给了p。 (3)字符串指针在未赋值以前,其指向是不确定的。 2、用字符数组作为字符串和用指针指向的一个字符串的区别 见P146图示
10.3字符串的输入和输出 字符串的输入: 1、逐个地为数组中各元素输入值 char strs scanf(“%c”,&str|0); 2、对一个字符数组一次输入一个串值 char str 9; scanf(“%0s”,str); 注意:(1)数组名本身就代表地址。 (2)系统会自动加上一个结束标记“0” (3)字符串以空格和回车作为结束标记
10.3 字符串的输入和输出 一、字符串的输入: 1、 逐个地为数组中各元素输入值。 char str[9]; scanf(“%c”,&str[0]); 2、对一个字符数组一次输入一个串值。 char str[9]; scanf(“%s”,str); 注意: (1)数组名本身就代表地址。 (2)系统会自动加上一个结束标记“\0” 。 (3)字符串以空格和回车作为结束标记
3、专门的字符串输入函数gets(str): char stre gets(str);/只以回车作结束标记* 字符串的输出: 格式化输出函数 printf(0 char str91 printf(oS, %c", str, strOD 注意:(1)输出元素时,要带下标(%c); (2)输出串时只要用数组名(%s)即可; (3)输出时不包括“10”。 (4)字符串中“0以后的字符不予输出 2、字符串输出函数puts(str) 例:puts(sr)
3、专门的字符串输入函数gets(str): char str[9]; gets(str); /* 只以回车作结束标记 */ 二、字符串的输出: 1、格式化输出函数printf(): char str[9]; printf(“%s,%c”,str,str[0]); 注意: (1)输出元素时,要带下标(%c); (2)输出串时只要用数组名(%s)即可; (3)输出时不包括“\0” 。 (4)字符串中“\0”以后的字符不予输出。 2、字符串输出函数puts(str): 例: puts(str);
10.4字符串数组 1维字符数组,用于存储和处理1个字符串,其 定义格式与1维数值数组一样 2维字符数组,用于同时存储和处理多个字符 串,其定义格式与2维数值数组一样
10.4 字符串数组 1维字符数组,用于存储和处理1个字符串,其 定义格式与1维数值数组一样。 2维字符数组,用于同时存储和处理多个字符 串,其定义格式与2维数值数组一样
10.5用于字符串处理的函数 1、字符串拷贝函数 strepto: 语法格式: strcpy(str;”字符串常量”); 注意: (1)C语言中不允许用赋值表达式对字符数组赋 值 (2)字符串结束标记“10”一起被复制到一个新 串中; (3)可以将一个字符数组中的一个字符串复制到 另一个字符数组中。 2、字符串连接函数 strcat0: 语法格式: strcat(str1,str2); 注意:字符串1sr1)要定义的足够大
10.5 用于字符串处理的函数 1、字符串拷贝函数strcpy(): 语法格式:strcpy(str,”字符串常量”); 注意: (1)C语言中不允许用赋值表达式对字符数组赋 值; (2)字符串结束标记“\0”一起被复制到一个新 串中; (3)可以将一个字符数组中的一个字符串复制到 另一个字符数组中。 2、字符串连接函数strcat(): 语法格式: strcat(str1,str2); 注意: 字符串1(str1)要定义的足够大