免费织梦模板,wordpress主题,web前端设计,建站教程,Photoshop教程,免费网站模板资源下载_微思考

字符数组-C语言

字符数组

字符型数据是以字符的ASCII代码存储在存储单元中的,一般占一个字节。由于ASCII代码属于整数形式,因此,把字符型归纳为整数类型中的一种。 由于字符数据的应用十分广泛,尤其是作为字符串形式的使用,有其自己的特点,我们单独成节来讲述该内容。

注意:c语言中没有字符串类型,字符串都是存储在字符型数组中的。

字符数组的定义

定义字符数组的方法与定义数值型数组的方法类似:例如:

char c[10];

以上就定义了c为字符数组,包含10个元素。

字符数组的初始化

把各个字符以此赋给数组中格元素。例如:

char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};

把这10个字符以此赋给c[0]~c[9]这10个元素。

注意:上面例子中花括号提供的初值个数(即字符个数)等于数组长度,倘若花括号中的提供初值个数大于数组长度,则会出现语法错误。倘若初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字符(即''\0').例如:

char c[10]={'I',' ','l','o','v','e',' ','c'};

该数组在内存的存储状态如下:

Alt text

在定义数组时可以省略数组长度,系统会自动根据处置个数确定数组长度。例如:

char c[]={'I',' ','a','m',' ','h','a','p','p','y'};

数组c的长度自动定为10.这种方式不用人工去数字符的个数,尤其在赋初值字符个数不较多的情况下,比较方便。

(1)编写程序8-4.     输出一个正方形。

解题思路:先画出一个平面正方形图案,每行包含5个字符,其中有的是空白字符,有的是'*'字符,定义一个字符型的二维数组并初始化,用for循环嵌套输出。

#include<stdio.h>int main()
{
    char c[][]={{'*','*','*','*','*'},{'*',' ',' ',' ','*'},{'*',' ',' ',' ','*'}, {'*','  ',' ',' ','*'},{'*','*','*','*','*'}};    
    int i,j;    
    for(i=0;i<5;i++)
    {           
        for(j=0;j<5;j++) 
        printf("%c",c[i][j]);           
        printf("\n");
    }    
      return 0;  
}

运行结果:

Alt text

—— ——||不好意思各位,没考虑到空格,输出成为了长方形,但是我相信大神们是可以输出正方形的,我们论坛见。

字符串和字符串结束标志

在c语言中,是将字符串作为字符数组来处理的。在平时的应用中,人们往往关心的是字符串的有效长度而不是字符数组的长度。例如,定义一个字符数组长 度50,而实际有效字符只有30个。为了测定字符串的实际长度,c语言规定了一个“字符串结束标志('\0')”,以字符'\0'作为结束标志。如果字符 数组中存在若干字符,前面9个字符都不是空字符('\0'),而第10个字符是'\0',则认为数组中有一个字符串,其有效字符为9个。 c系统在用字符数组存储字符串常量时会自动加一个'\0'作为结束符。 例如:

printf("Shiyanlou");

在执行次语句时系统怎么知道该输出到哪里为止呢?实际上,在向内存中存储时,系统自动在最后一个字符'u'后面加一个'\0'作为字符串结束标志。在执行printf函数时,每输出一个字符检查一次,看下一个字符是否为'\0',遇到'\0'就停止输出。

Alt text

有了上述理解,在对字符数组初始化的方法上面我们做出一些补充。例如:

char[]={"I love shiyanlou"};

我们也可以直接省去花括号:

char[]="I love shiyanlou";

这里不像之前单个字符作为字符数组的初值,而是用字符串作为初值(字符串做初值是用双撇号而不是单撇号)。这种方法更直观、更方便。

注意:此时数组的长度是17,而不是16,因为字符串常量的最后系统自动加了一个'\0'。上面的初始化与下面的初始化等价的。

char c[]={'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u','\0'};

和下面的这个不等价:

char c[]={'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u'};

字符数组的输入输出

字符数组的输入输出可以有两种方法。 (1)逐个字符输入输出,用格式“%c”输入或者输出一个字符。 (2)将整个字符串一次输入或者输出,用“%s”格式符,例如:

Alt text

内存中数组c的存储情况:

Alt text

使用字符串处理函数

c语言函数库中提供了一些用来专门处理字符串的函数,使用比较方便。

puts函数-输出字符串的函数

其一般形式如下

puts(字符数组)

起作用是讲一个字符串输出到终端,因此该函数用的不是很多,我们可以编写8-5一个小程序来体验:

#include<stdio.h>
#include<string.h> //在使用字符串处理函数时,在程序文件的开头用#include<string.h>
int main()
{   
    char str[]="China\nChengdu";   
    puts(str);   
    return 0;
}

运行结果为:

Alt text

gets函数-输入字符串的函数

一般形式为

gets(字符数组)

其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。 我们对上一个程序稍加修改,程序如下:

#include<stdio.h>
#include<string.h> //在使用字符串处理函数时,在程序文件的开头用#include<string.h>
int main()
{   
    char str[]="China\nChengdu";   
    puts(str);   
    return 0;
}

运行结果为:

Alt text

strcat函数-字符串连接函数

其一般形式为

strcat(字符数组1,字符数组2)

其作用是把两个字符数组中的字符串连接起来,把字符串2接到1后面,结果放到字符串1中。编写程序8-6:

#include<stdio.h>
#include<string.h> //在使用字符串处理函数时,在程序文件的开头用#include<string.h>
int main()
{   
    char str1[30]="People's Republic of";   
    char str2[]="China";   
    printf("%s",strcat(str1,str2));   
    return 0;
}

运行结果:

Alt text

注意:

(1)连接前两个字符串后面都有'\0',连接时将字符串1后面的'\0'取消,只在新串后面保留'\0' (2)字符串1必须足够大,以便于容纳字符串2。如果在定义是定义为char str1[]="People's Republic of";就会出现问题,因为长度不够。

strlen函数-测字符串长度的函数

一般形式:

strlen(字符数组)

它是测量字符串长度的函数。函数的值为字符串中的实际长度(不包含'\0'在内)。例如:

#include<stdio.h>
#include<string.h> //在使用字符串处理函数时,在程序文件的开头用#include<string.h>
int main()
{   
    char str[]="China";   
    printf("%d",strlen(str));   
    return 0;
}

运行结果:

5

strcpy和strncpy——字符串复制函数

一般形式为:

strcpy(字符数组1,字符数组2)

作用是将字符串2复制到字符串1中。例如:

#include<stdio.h>
#include<string.h> //在使用字符串处理函数时,在程序文件的开头用#include<string.h>
int main()
{   
    char str1[10],str2[]="China";   
    strcpy(str1,str2);   
    printf("%s",str1);   
    return 0;
}

运行结果:

China

注意:

(1)字符数组1必须定义的足够大,以便容纳被复制的字符串2. (2)“字符数组1”必须携程数组名形式(如str1),“字符串2”可以使字符数组名,也可以是一个字符串常量。例如:

strcpy(str1,"China");

作用与前面的相同 (3)不能用赋值语句将一个字符串常量直接给一个字符数组。如下面两行是错误的:

str1="shiyanlou";  //错误,企图用赋值语句将一个字符串常量直接赋值给一个数组
str1=str2;         //错误,企图用赋值语句将一个字符数组直接赋给另一个字符数组

strcmp——字符串比较函数

一般形式

strcmp(字符串1,字符串2)

它的作用是比较字符串1和字符串2.例如:

strcmp(str1,str2);strcmp("Chengdu","Beijing");

比较规则:将两个字符串自左向右逐个字符比较(按照ASCII码值大小比较),直到出现不同的字符或者遇到'\0'为止。 (1)如果全部字符相同,则认为两个字符串相同。 (2)若出现不同的字符,则以第1对不相同的字符的比较结果为准。例如: "A"<"D","e">"E","these">"that","computer">"compare"

比较结果由函数值带回。 (1)字符串1=字符串2,则函数值为0 (2)字符串1>字符串2,则函数值为一个正整数 (3)字符串1<字符串2,则函数值为一个负整数

关于字符串处理函数,还有strlwr函数(转换为小写的函数)、strupr函数(转换为大写的函数)等其它函数,我们这里不再一一阐述,有兴趣的小伙伴可以查询相关内容。

字符数组应用举例

任意键入3个字符串,编程找出最小的一个。

#include<stdio.h>
#include<string.h> //在使用字符串处理函数时,在程序文件的开头用#include<string.h>
int main()
{    
    char string[30];    
    char ch[3][30];    
    int i;    
    for(i=0;i<3;i++)
        gets(ch[i]);    
    strcpy(string,ch[0]);    
    for(i=1;i<3;i++)        
    if(strcmp(ch[i],string)<0)            
    strcpy(string,ch[i]);    
    printf("The result is :\n%s\n",string);    
    return 0;
}

运行结果为:

Alt text

更多内容请上实验楼

百家号 互联网微风说

百家号 互联网微风说

微信公众号 weisico-com

微信公众号weisico-com

转载请注明:微思考学习网-关注技术,分享知识 >> 字符数组-C语言

赞 (0) 收藏
分享到