C语言程序设计之字符数组的使用

1.字符数组的定义

 字符说明符 数组名[常量表达式]

示例

 char c[10]

字符数组也可以是二维或者多维数组

 char c[5][10]
2.字符数组的初始化

字符数组允许在定义时做初始化赋值

char c[10]={'a','b','c','d','e','f','g','h','i','j'};

赋值后各元素的值如下:

 c[0] 'a'
 c[1] 'b'
 c[2] 'c'
 c[3] 'd'
 c[4] 'e'
 c[5] 'f'
 c[6] 'g'
 c[7] 'h'
 c[8] 'i'
 c[9] 'j'

示例2:

char c[3][3]={'a','b','c','d','e','f','g','h','i'};

赋值后各元素的值如下:

 c[0][0]:a       c[0][1]:b       c[0][2]:c
 c[1][0]:d       c[1][1]:e       c[1][2]:f
 c[2][0]:g       c[2][1]:h       c[2][2]:i

示例3:

char c[4][3]={'a','b','c','d','e','f','g','h','i','j','k'};

赋值后各元素的值如下:

 c[0][0]:a       c[0][1]:b       c[0][2]:c
 c[1][0]:d       c[1][1]:e       c[1][2]:f
 c[2][0]:g       c[2][1]:h       c[2][2]:i
 c[3][0]:j       c[3][1]:k       c[3][2]:

由定义时可知,c[4] [3]为4行3列的二维数组,存储12个单位的字符。初始化赋值时,给出11个值,即最后一个未给出,系统自动赋值为空。

示例4:

当对全体元素赋初值时也可以省去长度说明

 char c[]={'a','b','c','d','e','f','g','h','i'};

这时数组c的长度自动定为9.

3.字符数组元素的引用

输出一维数组的值

 #include<stdio.h>
 int main()
 {
     int i;
     char c[9]={'a','b','c','d','e','f','g','h','i'};
     for(i=0;i<=8;i++)
         {
             printf("c[%d]:%c\t",i,c[i]);
         }
         printf("\n");   
 }

结果如下:

 c[0]:a  c[1]:b  c[2]:c  c[3]:d  c[4]:e  c[5]:f  c[6]:g  c[7]:h  c[8]:i

输出二维数组的值

 #include<stdio.h>
 int main()
 {
     int i,j;
     char c[3][3]={'a','b','c','d','e','f','g','h','i'};
     for(i=0;i<=2;i++)
     {
         for(j=0;j<=2;j++)
         {
             printf("c[%d][%d]:%c\t",i,j,c[i][j]);
         }
     }
 }

结果如下:

 c[0][0]:a       c[0][1]:b       c[0][2]:c
 c[1][0]:d       c[1][1]:e       c[1][2]:f
 c[2][0]:g       c[2][1]:h       c[2][2]:i

动态输入

 #include<stdio.h>
 int main()
 {
     int i;
     char c[10];
     for(i=0;i<=9;i++)
         {
             scanf("%c",&c[i]);
         }
     for(i=0;i<=9;i++)
         {
             printf("c[%d]:%c\t",i,c[i]);
         }   
     printf("数组c的长度为:%d",sizeof(c));
 }
 ​

运行结果:

 abcdefghij
 c[0]:a  c[1]:b  c[2]:c  c[3]:d  c[4]:e  c[5]:f  c[6]:g  c[7]:h  c[8]:i  c[9]:j  数组c的长度为:10

需要注意的是,此处不能使用回车进行换行以输入下一个,因为系统会认为回车键同样是输入的字符

例如:

 a
 b
 c
 d
 e
 c[0]:a  c[1]:
         c[2]:b  c[3]:
         c[4]:c  c[5]:
         c[6]:d  c[7]:
         c[8]:e  c[9]:
         数组c的长度为:10
4.字符串数组和字符串结束标志

字符串总是以'\0'作为串的结束符,当把一个字符串存入一个数组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。

c语言允许用字符串的方式对数组做初始化赋值。

char c[]={'a','b','c','d','e','f','g','h','i'};

可写成:

char c[]={"abcdefghi"};

对数组c中的元素输出并求数组长度:

 #include<stdio.h>
 int main()
 {
     int i;
     char c[]={"abcdefghi"};
     for(i=0;i<=9;i++)
         {
             printf("c[%d]:%c\t",i,c[i]);
         }   
     printf("数组c的长度为:%d",sizeof(c));
 }

或将{}去掉写成:

char c[]="abcdefghi";

对数组c中的元素输出并求数组长度:

#include<stdio.h>
 int main()
 {
     int i;
     char c[]="abcdefghi";
     for(i=0;i<=9;i++)
         {
             printf("c[%d]:%c\t",i,c[i]);
         }   
     printf("数组c的长度为:%d",sizeof(c));
 }
5.字符数组的输入/输出

利用printf()函数进行输出,利用scanf()函数进行输入

输出可以写成:

printf("%s",c);

输入函数 需要写成:

 scanf("%s",c);

注意​:需要格外注意的是,以往的scanf都需要使用&符号,将从键盘上输入的数据存储到变量或者数组中,但是输入字符串变量时,要注意不能使用&符号。

#include<stdio.h>
 int main()
 {
     int i;
     char c[10];
     scanf("%s",c);
     for(i=0;i<=9;i++)
         {
             printf("c[%d]:%c\t",i,c[i]);
         }   
     printf("数组c的长度为:%d",sizeof(c));
 }

运行结果如下:

 abcdefghij
 c[0]:a  c[1]:b  c[2]:c  c[3]:d  c[4]:e  c[5]:f  c[6]:g  c[7]:h  c[8]:i  c[9]:j  数组c的长度为:10

上述代码中可见是通过循环的形式将数组c[10]中的每个字符进行单独输出,若将单个字符以字符串的形式输出,则可得到如下结果:

 #include<stdio.h>
 int main()
 {
     int i;
     char c[10];
     scanf("%s",c);//使用scanf进行数据的写入 
     printf("%s",c); //使用printf对数组c进行输出 
     printf("\n");//换行 
     printf("数组c的长度为:%d",sizeof(c));//查看数组c的数据长度 
 }

运行结果如下:

 abcdefghij
 abcdefghij
 数组c的长度为:10

注意​:scanf函数输入字符串时,字符串中不能包含有空格,否则将以空格作为串的结束符

示例:

 #include<stdio.h>
 int main()
 {
     int i;
     char c[10];
     scanf("%s",c);//使用scanf进行数据的写入 
     printf("%s",c); //使用printf对数组c进行输出 
     printf("\n");//换行 
     printf("数组c的长度为:%d",sizeof(c));//查看数组c的数据长度 
 }

运行结果如下:

 ab cdef hij
 ab
 数组c的长度为:10

由运行结果可知,输入的字符为ab cdef hij,中间包含有两个空格,使用printf函数将数组c进行输出后,得到的结果为ab,即将第一个空格作为了结束符,数组c中仅存储了ab。

若需要输入的字符串中包含空格时,需要定义多个字符数组,如要保存abc xyz +-*,则需要定义三个数组。

 char s1[3],s2[3],s3[3];
 scanf("%s %s %s",s1,s2,s3);
 printf("s1的值为:%s\ns2的值为%s\ns3的值为%s",s1,s2,s3);

运行结果如下:

 输入你的数据:abc xyz +-*
 s1的值为:abc
 s2的值为xyz
 s3的值为+-*
6.字符串处理函数

若在后续的代码运行过程中,报如下错误

 [Warning] incompatible implicit declaration of built-in function 'strcpy'

则是因为缺少头文件的问题,将下列代码添加到代码开始,即可解决warning的问题。

 #include<string.h>
1.字符串输出函数puts

格式:puts(字符数组名)

功能:把字符数组中的字符输出到显示屏,即在屏幕上显示该字符串。

 char c[]="abcdefghi";
 puts(c);

运行结果如下:

abcdefghi

关于puts函数会将数组输出后换行的问题,可以考虑使用fputs(数组名,stdout)的格式进行输出

 #include<stdio.h>
 int main()
 {
     char s1[5]="abc";
     fputs(s1,stdout);       
 }
2.字符串输入函数gets

格式:gets(字符数组名)

功能:从键盘上输入一个字符串

 #include<stdio.h>
 int main()
 {
     char c[10];
     printf("输入你的字符串:");
     gets(c); 
     printf("字符串c的值为:");
     puts(c);        
 }

运行结果:

 输入你的字符串:abc
 字符串c的值为:abc
3.字符串连接函数strcat

格式:stract(字符数组名1,字符数组名2)

功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的字符串结束标记'\0'.

 
 #include<stdio.h>
 int main()
 {
     char c1[10]="abc",c2[3];
     printf("输入c2字符串的值:");
     gets(c2); 
     strcat(c1,c2);
     printf("字符串c1的值为:");
     puts(c1);       
 }  

运行结果如下:

 输入c2字符串的值:xyz
 字符串c1的值为:abcxyz

注意​:字符串1应具有足够长度,保证字符串2能被完整的装入,否则将造成数据缺失。

4.字符串复制函数strcpy

格式:strcpy(字符数组1,字符数组2)

功能:把字符数组2中的字符串复制到字符数组1中。串结束标志'\0'也一同被复制。

 char s1="abc",s2="xyz";
 strcpy(s1,s2);
 puts(s1);

运行结果:

 xyz
5.字符串比较函数

格式:strcmp(字符数组名1,字符数组名2)

功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值比较结果

规则:字符串1=字符串2 返回值为0

字符串1>字符串2 返回为>0

字符串1<字符串2 返回为<0

 #include<stdio.h>
 ​
 int main()
 {
     char s1[5]="abc",s2[5]="ba",s3[5]="ca",s4[5]="d",s5[5]="abw";
     int result;
     result=strcmp(s1,s2);
     printf("%d\n",result);
     result=strcmp(s4,s3);
     printf("%d\n",result);
     result=strcmp(s1,s5);
     printf("%d",result);        
 }

运行结果:

-1
 1
-1

6.测字符串长度函数

格式:strlen(字符数组名)

功能:测字符串的实际长度(不含字符串结束标志'\0')并作为函数返回值返回

 #include<stdio.h>
 ​int main()
 {
     char s1[5]="abc",s2[5]="xyz2";
     int len;
     len=strlen(s1);
     printf("数组s1的实际长度为:%d\n",len);
     len=strlen(s2);
     printf("数组s2的实际长度为:%d",len);        
 }

运行结果如下:

 数组s1的实际长度为:3
 数组s2的实际长度为:4

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值