C语言之字符数组

目录

前言

字符数组

字符串的存储

字符数组初始化  

字符数组的输入输出

字符串处理函数

·字符串输出函数 puts

·字符串输入函数gets

·字符串连接函数strcat

·字符串拷贝函数strcpy

·字符串比较函数strcmp

·字符串长度函数strlen

·字符串处理函数(strlwr函数与strupr函数)

总结



前言

本篇是针对网上学习字符数组的知识点的总结。

字符数组

用来存放字符数据的数组是字符数组

C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符

一维字符数组:存放一个字符串(每个数组元素存放一个字符)

二维字符数组:存放多个一维数组(字符串);二维数组的行数是字符串的个数

定义格式: char 数组名[常量表达式];

                例如:char c[6];     //c数组具有6个元素,可以存放长度小于或等于5的字符串。

                    char 数组名[常量表达式][常量表达式];        //声明的时候,方括号中一定是常量或常量表达式,使用的时候可以是变量。其中常量表达式:整数、字符、符号常量 。 也可以用整型数组存放字符型数据,但是浪费存储空间。

字符串的存储

例如:char c[10]="c program";      该数组在计算机中存储的形式为

c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9]
c 空格 p r o g r a m

强调:字符串实际占有单元的数量等于字符串长度+1。

           定义时注意考虑元素总个数应比实际长度多1。

字符数组初始化  

(一)用单个字符对字符数组初始化

例如:char c[10]={'c',' ', 'p','r','o','g','r','a','m',''};   //把10个字符依次赋给c[0]~c[9]这10个元素

内存中存储情况:

c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9]
c p r o g r a m

说明:

  • 如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的
  • 如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误
  • 如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度
  • 如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'')

(二)用字符串常量对字符数组初始化

例如:(1)char str[6]={"CHINA"};

           (2)char str[6]="CHINA";            //省略{}

           (3)char str[ ]="CHINA";            // 省略长度值

           (4)char c[12]={"HOW ARE YOU"};  

                    与char c[ ]={'H','O','W',' ','A','R','E',' ','Y','O','U',''};  等价  

           (5)char *p=c;     //用一个指针指向该数组,*(p+i) <=> a[i]

说明:

  • 将字符串存储到字符数组中,字符串和第一个''构成有效字符串。对字符串的操作,就说对字符数组的操作
  • 普通数组中的元素是确定的,一般用下标控制循环;而字符串使用结束符''来控制循环

字符数组的输入输出

1、单个字符输入输出(用格式符%c或字符输入函数)

#include<stdio.h>
int main()
{
    char c[5];
    int i;
    for(i=0;i<5;i++)
       scanf("%c",&c[i]);
    for(i=0;i<5;i++)
       printf("%c",c[i]);
    printf("n");
    return 0;
}
输入 China
输出 China
输入 Program
输出 Progr

(2)字符串整体或部分输入输出(用格式符%s

#include<stdio.h>
int main()
{
    char str[5];
    scanf("%s",str);
    prinaf("%s",str);
}

说明:

不需要用循环语句进行输入输出操作

输入输出项必须是以字符串的地址形式出现,也可以是字符串常量:printf("%sn","book");

 输入时:

  • 数组名前不加&符号
  • 输入字符串的长度要小于数组长度
  • 只能输入不包括空格、t和n的字符串
  • 若要输入空格,用gets函数
  • 自动加''

例如:

#include<stdio.h>
int main()
{
    char str[13];
    scanf("%s",str);
    printf("%s",str);
}
输入:CHINA IS GOOD
输出:CHINA

输出时:遇''结束

字符串处理函数

包含在头文件 string.h

·字符串输出函数 puts

格式:  puts(字符数组)

功能:向显示器输出一个字符串(输出完,换行)

说明:字符数组必须以''结束。可以包含转义字符。输出时''转换成'n',即输出字符后换行。

#include<stdio.h>
#include<string.h>
int main()
{
    char a[]={"chinangood"};
    char b[]={"zhongguo"};
    puts(a);
    puts(b); 
    puts("CHINA");
}
运行结果:
china
good
zhong   //将''转换成'n'
CHINA

·字符串输入函数gets

格式:gets(字符数组)

功能:从键盘输入一个回车结束的字符串放入字符数组中,并自动加''

说明:输入串长度要小于字符数组长度

#include<stdio.h>
#include<string.h>
int main()
{
    char a1[10],a2[10];
    gets(a1);
    scanf("%s",a2);
    printf("a1=%sn",a1);
    printf("a2=%sn",a2);
}
输入:
china china  //在scanf中遇到空格字符串便结束了,而gets中,却将空格作为字符存放入字符数组中
china china
输出:
a1=china china
a2=china
输入:
abcdeabcdeabcde
abcdeabcdeabcde
输出:
a1=abcdeabcde
a2=abcdeabcdeabcde

注意:puts和gets函数只能输入输出一个字符串.   不能这样:puts(a1,a2);  gets(a1,a2);

·字符串连接函数strcat

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

功能:把字符数组2连到字符数组1后面

返值:返回字符数组1的首地址

说明:

  • 字符数组1必须足够大
  • 连接前,两串均以''结束;连接后,串1的''取消,新串最后加''。
#include<stdio.h>
#include<string.h>
int main()
{
    char str1[10]={"China is"};
    char str2[]={"good"};
    printf("%sn",strcat(str1,str2));
}

输出: China is good
str1: China is
str2: good
str1: China is good

·字符串拷贝函数strcpy

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

功能:把字符数组2,拷贝到字符数组1中去

返值:返回字符数组1的首地址

说明:

  • 字符数组1必须足够大,至少大于字符串2
  • 字符数组1必须是数组名形式(str1),字符串2可以是字符数组名或字符串常量
  • 拷贝时''一同拷贝
  • 一般形式
#include<stdio.h>
#include<string.h>
int main()
{
    char str1[20],str2[]="Hello!";
       strcpy(str1,str2);
    printf("%sn",str1);
    printf("%dn",strlen(str1));
    printf("%dn",sizeof(str1));
}  
Hello!
6
20   //总长度

·字符串比较函数strcmp

格式: strcmp(字符串1,字符串2)

功能:比较两个字符串

比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或''为止

返回值:返回int型整数。其值是ASCII码的差值(根据编译器的不同,也有可能返回1,0,-1)

              若字符串1大于字符串2,返回正整数

              若字符串1等于字符串2,返回

              若字符串1小于字符串2,返回负整数

说明:字符比较必须用strcmp

#include<stdio.h>
#include<string.h>
int main()
{
    char a[]={"china"},b[]={"henan"};
    int x.y.z;
    x=strcmp(a,b);
    y=strcmp("china","beijing");
    z=strcmp(a,"china");
    printf("x=%dny=%dnz=%dn",x,y,z);
    return 0;
}
x=-1  //只比较了c与h的ASCII码值,在ASCII码表中,c的值小于h的值
y=1   // 在ASCII码表中,c的值大于b的值
z=0   

·字符串长度函数strlen

strlen是函数,要在运行的时候才能计算。参数必须是字符型指针。当数组名作为参数传入时,实际上数组就退化成指针了

格式: strlen(字符数组)

功能:返回字符串的长度。该字符串可能时自己定义的,也可能时内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

返值:返回字符串实际长度,不包括‘’在内

#include<stdio.h>
#include<string.h>
int main()
{
    char a[]="china";
    printf("%dn",strlen(a));
    printf("%dn",sizeof(a));
}

输出:

5  //china后面自带'',strlen返回的字符串长度不带''
6

·字符串处理函数(strlwr函数与strupr函数)

strlwr函数:

格式:strlwr(字符串)

作用:将字符串中的大写字母换成小写字母

strupr函数:

格式:strupr(字符串)

作用:将字符串中的小写字母换成大写字母

总结

字符数组的相关内容就总结到这里吧,欢迎大家批评指正。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>