第7章 字符数组与字符串

合集下载

字符数组和字符串

字符数组和字符串
printf(“%c”,diamond[i][j]); printf(“\n”); }
* ** ** ** *
}
main() a
{ char a[5]; int i=0;
b
while(i<=4)
c
{ scanf(“%c”,&a[i]);
c
i
{ char a[5]; int i=0
跳格分隔。因此不要试图利用scanf函数从键盘输入
How are you? 赋给一个字符串。
1.5 字符数组处理函数
1.字符串输入gets()函数 使用形式: gets(字符数组) 功能:从终端输入一个字符串(直到回车键) 到字符数组中。
例如:char str[20]; gets(str); 若从键盘输入:Hello World! 则将字符串“Hello World!”送到字符数组str中。
输出:10 char str[80]={“ab\n\0y\012/\\\””} ; printf(“%d”,strlen(str)) ;
输出:3
4.字符串连接strcat()函数
使用形式: strcat(字符数组1,字符串2)
如:“china” 占内存6个字节,但字符串长度 是5 在C语言中用字符数组来处理字符串,每个 元素存放一个字符型数据。
字符型数组可用一般数组的初始化方式初始化 外,还可以使用字符串常量初始化:
如:char message[]={“Hello”}; √ 或 char message[]=“Hello”; √
说明:字符数组本身并不要求它的最后一个元素一
定是‘\0’,例如:char ch[2]={‘A’, ‘B’};是合法的。 当定义字符数组用字符串常量赋初值时,最后有一 个元素其值为‘\0’。为了使处理方法一致,在字符 数组中也常常人为地加上一个值为‘\0’的元素。

C语言开发基础教程(Dev-C++) 第7章 字符串

C语言开发基础教程(Dev-C++) 第7章 字符串


7.1.2 字符串
小提示:'\0'字符 字符串其实就是一个以空字符'\0'结尾的字符数组,在定义存储字符 串的数组时,要手动在数组末尾加上'\0',或者直接使用字符串对数 组进行初始化。

7.1.2 字符串
字符数组的输出: 字符数组可以通过%s格式化输出,直接输 出数组名。 char char_array[6] = {"hello"}; printf("%s", char_array); //结果为hello

7.2.1 常见的输入函数
2、getchar()函数 getchar()函数用于从标准输入中读取一个字符,其函数声明如下: int getchar(void); getchar()没有参数,可直接使用,其返回值为读取到的字符。

7.2.1 常见的输入函数
3、gets()函数 gets()函数用于读取一个字符串,其函数声明如下: char *gets(char *str); gets()函数读取换行符之前的所有字符(不包括换行符本身),并在字 符串的末尾添加一个空字符‘\0’用来标记字符串的结束,读取到的字 符串会以指针形式返回。

第7章 字符串
·字符数组与字符串 · 字符串指针 · 字符串的输入输出
· 字符串操作函数 · 数字与字符串转换 · 阶段案例

7.1 字符数组和字符串
字符数组是由字符类型的元素所组成 的数组,字符串就存储在字符数组中, 在访问字符数组时,可使用下标法读 取指定位置的字符,也可使用%s格式 将字符数组中的元素以字符串的形式 全部输出。

7.3.1 字符串比较函数

第七章 数组

第七章  数组

例题1:求10名同学的平均分。7_2.c
main( ) { int a[10]; int i ,sum=0,ave; for (i=0;i<10;i++) scanf("%d",&a[i]); /*类型说明符 数组名[常量表达式]
数组名为a,此数组有10个整型元素*/
/* a[0], a[1], a[2], a[3], a[4]
3. 如果输入多个字符串,则可用空格隔开
char str1[20],str2[20],str3[20]; scanf(“%s%s%s”,str1,str2,str3); 输入为 How are you str1中为“How”, str2 中为“are”, str3中为 “you”。
7.3.3字符数组举例: 从键盘输入一行字符串(<20),求字符串中 小写字母的个数。7-6.c main() {char str[20],len=0,i; 求这个字符串 scanf ("%s",str); 的长度? for (i=0; str[i]!='\0';i++) if (str[i]>='a'&&str[i]<='z') len++; printf ("\n%d",len); }
1 2 3 4 5 6 7 8 9 a[8] 10 a[9]
a[0] a[1] a[2] a[3] a[4]
a[5] a[6] a[7]
2. 不允许对数组的大小作动态定义,即数组的大 小不能是变量。 例如:下面是不合法的: int n; float a[n]; 3. 数组元素的使用与变量是一样的。可以赋值, 也可作各种运算,还可以输入和输出。 例如:a [0]=1 ; a[1]=a[0]型_char、实 型_float)的数据外, C语言还提供了构造类型 的数据,它们有:数组类型、结构体类型、共用 体类型。构造类型数据是由基本类型数据按一定 规则组成的。

第七章字符数组与指针练习题参考答案(2)

第七章字符数组与指针练习题参考答案(2)

第七章字符数组与字符串【题7.29】下面是对s的初始化,其中不正确的是。

A)char s[5]={“abc”};B)char s[5]={‘a’,‘b’,‘c’}; C)char s[5]=“”;D)char s[5]=“abcdef”;【题7.30】下面程序段的运行结果是。

char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’};printf(“%s”,c);A)‘a’‘b’B)abC)ab c【题7.31】对两个数组a和b进行如下初始化char a[]=“ABCDEF”;char b[]={‘A’, ‘B’,‘C’,‘D’,‘E’,‘F’};则以下叙述正确的是。

A)a与b数组完全相同B)a与b长度相同C)a和b中都存放字符串D)a数组比b数组长度长提示:‘\0’是字符串结束的标志【题7.32】有两个字符数组a、b,则以下正确的输入格式是。

A)gets(a,b); B)scanf(“%s %s”,a,b);C)scanf(“%s %s”,&a,&b); D)gets(“a”),get(“b”);【题7.33】有字符数组a[80]和b[80],则正确的输出形式是。

A)puts(a,b); B)printf(“%s %s”,a[],b[]);C)putchar(a,b); D)puts(a),puts(b);【题7.34】下面程序段的运行结果是。

char a[7]=“abcdef”;char b[4]=“ABC”;strcpy(a,b);printf(“%c”,a[5]);A)空格B)\0 C)e D)f提示:复制后a[0]=‘A’,a[1]=‘B’,a[2]=‘C’,a[3]=‘\0’,a[4]=‘e’,a[5 ]=‘f’,a[6]=‘\0’,【题7.35】有下面的程序段char a[3],b[]=“China”;a=b;printf(“%s”,a);则。

A)运行后将输出China B)运行后将输出ChC)运行后将输出Chi D)编译出错提示:数组名是常量【题7.36】下面程序段的运行结果是。

C语言程序设计数组

C语言程序设计数组
第七章 数组
课程名称:C语言程序设计 课型与教法:讲授,经过程序扩展,进行对比学习 课时:2课时 讲课题目:
第7章 数组 基本教材:C语言程序设计(高等教育出版社)廖雷主编 教学目旳与要求:经过本章旳学习使学生了解数组旳意义和 基本概念,掌握数组旳定义和元素旳引用,掌握数组在实际 问题处理中旳应用。 教学难点:二维数组概念旳了解 教学要点:数组旳定义和元素旳引用、数据旳排序
例 int data[5a][;1]=7p8r.0in; tf(“%d”,a);
()
data[5]必=1p须0ri;nt/f/f(没o“r%p有(jrl=fi错n\n0t”;f误(j,<a“提[%120]醒d);;\j,t+使”,+a用)[j]时);要注意 () 5
第七章 数组
一维数组
一维数组旳初始化
int a[N]={7,3,2,5,9,1,6,10,4,8}; for(i=0;i<N-1;i++)
for(j=N-1;j>i;j--) if(a[j-1]>a[j]) { k=a[j-1]; a[j-1]=a[j]; a[j]=k; }
printf(“\n”); for(i=0;i<N;i++)
❖数组元素旳存储顺序
原二因维:数内组存例:是按i一nt行维a[序3旳]优[4]先; float b[2][5];
元素个数=行数*列数
例:int a[3]i[n2t]a[3,4];
a[0][0] a[0][1]
0 () a[0][0]
1
a[0][1]
2
a[1][0]
a[1][0] a[1][1] a[2][0] a[2][1]
一维数组旳引用

大学课件C语言数组

大学课件C语言数组
第3趟排序后成为:37, 48, 12, 26, 49, 64, 75, 97 第4趟排序后成为:37, 12, 26, 48, 49, 64, 75, 97 第5趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
第6趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f",&value); x[i]=value; } total=0.0; for(i=0;i<10;i++) total=total+x[i]*x[i];
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
number[0] number[1] number[2] number[3] number[4]
C语言中,数组元素的序号(下标)从0开始。
对数组的引用超过了所声明的范围,会导致不可预知的结果.
9
数组的作用
数组元素的作用相当于简单变量 数组名代表的是数组在内存中的首地址 同一个数组中的元素在内存中是按顺 序连续存放的
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f", &x[i]); total=total+x[i]*x[i]; } printf("\n"); for(i=0;i<10;i++) printf("x[%2d]=%5.2f\n", i, x[i]); printf("\ntotal=%.2f\n", total);

C语言开发基础教程(Dev-C++) 第7章 字符串

C语言开发基础教程(Dev-C++) 第7章 字符串


7.1.1 字符数组
字符数组定义方式与整型数组类似: char 数组名[数组大小]; //一维字符数组 例如,定义字符数组: char ch[6]; char c[5]={'h','e','l','l','o'};
c[0] c[1] c[2] c[3] c[4]
he
l
l
o
访问字符数组中的元素 c[0]; //第1个元素 c[1]; //第2个元素 c[2]; //第3个元素

7.1.2 字符串
获取字符串的长度: C语言中的strlen()函数获取字符串的长度: unsigned int strlen(char *s); 示例代码如下: strlen("hello"); //获取字符串hello的长度 strlen(char_array); //获取字符数组 char_array中存储的字符串的长度
‘‘aa’’ ‘‘bb’’ ‘‘cc’’ ‘‘dd’’ ‘‘ee’’ ‘‘\\00’’

7.1.2 字符串
字符串由字符数组进行存储,那么可以直接使用一个字符串常量来为 一个字符数组赋值。 char char_array[6] = {"hello"}; char char_array[] = {"hello"}; 上述两个字符数组的大小都是6,这是因为字符串末尾有一个’\0’ 结束符。它们等同于下面数组的定义: char char_array[6] = {'h', 'e', 'l', 'l', 'o', '\0'};

c语言字符串数组和字符串字面量

c语言字符串数组和字符串字面量

c语言字符串数组和字符串字面量C语言字符串数组和字符串字面量在C语言中,字符串是一种常见的数据类型,用于存储和处理文本信息。

字符串数组和字符串字面量是C语言中用来表示和操作字符串的两种主要方式。

本文将详细介绍这两种方式的特点、用法以及注意事项。

1. 字符串数组字符串数组是一种由字符组成的数组,用于存储和操作字符串。

其定义方式如下:```cchar str[20] = "Hello, world!";```其中,str是一个字符数组,长度为20,可以存储19个字符和一个结尾的空字符'\0'。

由于C语言中没有提供专门的字符串类型,所以通常使用字符数组来表示字符串。

字符串数组可以进行各种操作,比如拷贝、连接、比较等。

下面是一些常见的操作示例:- 拷贝字符串:使用strcpy函数可以将一个字符串拷贝到另一个字符串数组中。

```cchar dest[20];char src[10] = "Hello";strcpy(dest, src);```- 连接字符串:使用strcat函数可以将一个字符串连接到另一个字符串数组的末尾。

```cchar str1[20] = "Hello";char str2[10] = ", world!";strcat(str1, str2);```- 比较字符串:使用strcmp函数可以比较两个字符串的大小关系。

```cchar str1[10] = "Hello";char str2[10] = "World";int result = strcmp(str1, str2);```除了以上操作外,还可以使用字符串数组进行遍历、截取等操作。

需要注意的是,对字符串数组进行操作时,需要保证目标数组有足够的空间,以免发生数组越界的错误。

2. 字符串字面量字符串字面量是一种直接在代码中写出的字符串,也称为字符串常量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字符型溢出问题
解决问题: 字符加密
输入一个英文小写字符和正整数k(k<26), 将英文字母加密并输出。
加密思想:将每个字母c加一个序数k,即 用它后面的第k个字母代替,变换公式: c=c+k。如果字母为z,则后一个字母是a, 也就是字母表形成一个圆。
源程序7-1:char类型溢出
#include<stdio.h>
数字 转义序列
字符转义序列使用起来很容易,但数量有限,并没有 包含所有无法打印的ASCII字符。C语言提供了数字转义序 列。所有ASCII码字符,都可以用数字转义序列来表示。 可以用八进制数或十六进制来书写转义字符。
八进制转义序列:由\和跟随其后的最多含有三位数字 的八进制数组成。例如,'a'的ASCII码对应的八进制是 141,则数字转义序列'\141'就表示'a'。
解决方法2:分类处理,避免溢出
#include<stdio.h>
int main() {
char ch; int k;
scanf("%c %d", &ch, &k);
if(ch + k > 'z') ch = ch + k - 26;
else ch = ch + k;
若ch + k > ’z’,则减去26后 存储,避免存储时溢出
在计算ch + k 的过程中不会 溢出,因为因为编译器把算 术运算中涉及的char类型都 提升为int类型
printf("%c\n", ch); return 0; }
注意计算过程中的溢出
其实有更多的类型溢出是发生在计算阶段,例如 表达式:k = 123456 * 123456 / 123456, 虽然结 果不会超出int范围,但在计算过程中,中间结果超出 int范围,也将发生溢出。
signed char: -128 至 +127
‘z’+6 的 值 是 128 超 出 char 表 示范围
printf("%c\n", ch); return 0; }
解决方法1:使用unsigned char
#include<stdio.h>
int main() {
unsigned char ch;
char name[15] = { 'W', 'a',
'n', 'g', 'L', 'i'};
用字符数组
char d = 'g';
char e = 'L';
char f = 'i';用若干个字符
用字符串char name[15] = “Wang Li”;
7.2.1统计空格
解决问题:输入一行字符(字符个数不多于 80),统计其中空格的个数 解题思路: (1)定义字符数组 str[81]; (2)读入字符串 若字符串确定不含空格,可以用 scanf(“%s”,&str); 若可能含有空格,用gets(str); (3)扫描整个字符串(不需要知道字符个数)
40 (
62
>
125
}
41 )
63
?
126
~
42 *
64
@
127
DEL
43
+
65 ~ 90 A ~ Z
字符数据类型
占 8 位内存
unsigned 0 至 255
signed 或
unsigned
Signed -128 至 +127
在C语言中,字符和整数之间存在着密切的关 系。C语言把字符当成小整数进行处理。
字符 转义序列
转义序列 \a \b \f \n \r \t \v \' \" \? \\ \0
名称 警告 退格 换页 换行 回车 水平制表 垂直制表 单引号 双引号 问号 反斜线 空
描述 产生一则警告。 将光标回退一格。 将光标移到下一页的第一格。 将光标移到下一行的第一格。 将光标移到当前行的第一格。 将光标移到下一个水平制表位置。 将光标移到下一个垂直制表位置。 产生一个单引号。 产生一个双引号。 产生一个问号。 产生一条反斜线。 产生一个空字符。
十六进制转义序列:由\x和跟随其后的十六进制数组成。 例如,'a'的ASCII码对应的十六进制是61,则数字转义序 列'\x61'就表示'a'。
数字转义序列(部分)
八进制转义序列 十六进制转义序列
\7
\x7
\10
\x8
\12
\x0C
\10
\x0A
\40
\x20
\60
\x30
\101
\x41
\141
格式串中的%c之前加上一个空格: scanf("%d", &n); scanf(" %c", &ch);
scanf格式串中的空白意味着“跳过零个或多个空白字符” 。
7.1.4 字符处理函数
前面已经讲过如何把小写字母转换成大写字母:
if(ch >= 'a' && ch <= 'z')
ch = ch - 32; 其实可以使用库函数toupper()来完成上述操作,即
int k;
scanf("%c %d", &ch, &k); ch = ch + k;
unsigned char: 0 至 255
一个英文小写字符和正 整数k(k<26)的和, 不会#39;) ch = ch - 26;
printf("%c\n", ch); return 0; }
#include<stdio.h> int main() {
int k = 123456 * 123456 / 123456; printf("%d\n", k); return 0; } 该程序无法得到正确结果,是因为计算 123456 * 123456的 结果超出了int类型的表示范围。 避免此类问题的方法: 1、选择表示范围更大的数据类型 2、先除后乘,但要解决好整数除法带来的问题。
重写程序4-13:字符分类统计
letter = digit = other = 0;
while(ch = getchar(), ch != '\n')
{
if( isalpha(ch) )
/*若ch是字母*/
letter++;
else if( isdigit(ch) ) /*若ch是数字*/
digit++;
\x61
响铃 退格键 换页键 换行键 空格 0 A a
描述
printf(“a\10b\n”); //输出: b, 因为转义序列’\10’是 退格键 printf(“\141\10\142\n”); //输出: b, 含义同上
7.1.3 字符数据的输入输出
scanf()函数和getchar()都可以用来读入单个字 符。但与整型和实型数据的读入不同的是, 所有输入都是合法的字符输入,包括空格、 回车等空白符。
else
/*其他字符*/
other++;
}
ctype.h头文件中的部分函数
函数
功能
tolower() toupper() islower() isupper() isalpha() isdigit() isxdigit() isblank()
转换为小写字母
转换为大写字母
判断是否是小写字母
判断是否是大写字母
判断是否是小写或大写字母
判断是否是十进制数字('0'-'9') 判 断 是 否 是 十 六 进 制 数 字 ( '0'-'9' , 'a'-'f','A'-'F') 判断是否是空白字符(空格,'\t')
7.2 字符数组与字符串
Wang Li
如何让程序存储我的姓名?
char a = 'W'; char b = 'a'; char c = 'n';
"Hello World"
"WangPing"
"Please enter your full name:"
“Hello!\n"
字符串常量中可以包含转义序列
He l l o
W o r l d \0
字符串结束符
字符串的有效长度:有效字符的个数
字符串的存储
char s[80] = "Happy"; 字符串遇 '\0' 结束 第一个 '\0' 前面的所有字符和 '\0' 一起构成了字
符串 "Happy” '\0' 之后的其他数组元素与该字符串无关
字符串由有效字符和字符串结束符 '\0' 组成
s H a p p y \0 \0 \0 …
s[0] s[1]
s[5]
字符串与字符数组
在C语言中没有专门的字符串变量,通常用一个 字符数组来存放一个字符串
字符数组和字符串的区别是:字符串的末尾有一 个空字符 ‘\0’
7.1.2 转义序列
相关文档
最新文档