`

char类型数组

阅读更多

字符数组(一维、二维)(一)

第二节   字符数组

字符数组是数组元素为char类型的一种数组。凡是适合数组的定义和赋值,也都适合于字符数组。由于C语言没有提供字符串类型,字符串一般用一维字符数组来存放,而二维字符数组可以存放多个字符串。

一、字符数组的定义

字符数组定义的一般格式为:

l            一维字符数组:char 数组名[整型常量表达式];

l            二维字符数组:char 数组名[整型常量表达式1][整型常量表达式2];

如: char c[10],c1[2][15];

二、字符数组的初始化和赋值

字符数组的初始化与赋值与一般数组的很相似,但也有其特殊之处。

1.一维字符数组的初始化

如下例:

char c[5]={ ' a', 'b', 'c', 'd', 'e'};

这是最基本的初始化方式。在初始化时要注意数组元素存放的是字符,因此用单引号而不是用双引号,如下面的初始化:

      char c[5]={ " a","b","c","d","e"}; /*错误初始化方式*/

这时每个元素的初值变成了字符串,这显然是错误的。

当字符数组用来存放字符串时,要注意字符串中包含了一个字符串结束标志'\0',这个结束标志也要占用一个单元。其初始化方式有以下几种:

l            用{ }列出初值列表实现。如:

       char s1[5]={ 'a', 'b', 'c', 'd', '\0'};

s1中存放的是字符串"abcd"

l            用字符串常量直接初始化。如:

char s1[5]= "abcd";

这种方式初始化时,一定要注意数组的长度和字符串的长度的关系:字符串长度不包含结束符'\0',数组长度要把结束符算在其内,因此数组的长度要大于字符串的长度。如下面的操作是错误的:

    char s1[5]= "abcde"; /*数组的空间不够存放字符串*/

l            省略数组的大小,进行初始化。这是根据初值中字符的个数确定数组的长度。如:

char s2[]="hello";

它等价于 char s2[6]= "hello";

2.二维字符数组的初始化

与其它二维数组初始化一样,有以下几种方式:

l            用初值列表方式。如:

char s3[2][4]={{ ' a', 'b', 'c', '\0'},{' m', 'n', 'l', '\0'}};

l            用字符串常量方式。如:

char s3[2][4]={ " abc"," mnl"};

l            省略第一维大小的方式来初始化。如:

char s3[][4]={{ ' a', 'b', 'c', '\0'},{' m', 'n', 'l', '\0'}};

或 char s3[][4]={ " abc","mnl"};

        根据分行赋值的大括号{}的个数或常量字符串的个数确定第一维的大小为2。

3.赋值

与一般数组赋值相同,不能将一个字符串直接赋值给一个数组名,只能对字符数组的元素逐个赋值。如:

char s4[6];

要给它赋值为"hello",只能如下方式:

s4[0]= 'h',s4[1]= 'e',s4[2]= 'l',s4[3]= 'l',s4[4]= 'o',s4[5]= '\0';

而不能为:s4="hello";

也不能是:s4[6]= "hello";

注意:C语言中,无论是字符数组还是数值型数组在程序中只能给它的元素赋值。

三、字符数组的输入输出

其它类型的数组元素在输入输出时,只能逐个元素实现输入输出,但用字符数组来存放字符串时,可以进行整体的输入输出。

1.一维字符数组的输入输出

利用scanf()函数和printf()函数来实现输入输出时,通过在格式字符串中使用格式说明“%s”来实现。如:

例4.1        分析下面程序运行结果。

main( )

{

    char s[7];

printf(" please input a string: ");

scanf(" %s",s);

printf("the string is: %s. ",s);

}

输入及运行结果为:

     please input a string: hello↙

     the string is: hello.

在输入时,已将字符串"hello"存放到了数组s中了。

注意:

?       在scanf()函数中使用格式说明“%s”时,该函数对应的输入数据项中直接用数组名,因为在C语言中数组名代表该数组在内存中的起始地址。

?       要求输入的字符串长度要小于数组的长度,因为系统会自动在输入的字符串后面加上字符串结束标志'\0'。

?       在输入字符串时,输入的字符串是以空格、Tab键或回车等空白字符作为字符串输入的结束标志,后面的字符将作为另外输入项的内容。如:

例4.2        分析下面程序运行结果。

main( )

          {

             char name[20];

             printf("please input name: ");

             scanf(" %s",name);

             printf("the name: %s.\n",name);

}

程序输入及运行结果为:

              please input name:zhang san↙

              the name: zhang

该程序输入的虽然是" zhang san",但由于zhang后面有空格,故输出为" zhang",亦即数组name中的值为:" zhang"。

?       利用“%s”格式说明输出字符串时,printf()函数的对应输出项应直接给出数组名,而不能是数组元素,因为数组元素的类型为char类型,而使用的格式说明为“%s”,并且要求用printf()函数输出的字符数组,必须以' \0'作为结尾。

当然,字符串也可以通过scanf()函数和printf()函数利用格式说明“%c”来实现输入输出,但这时只能逐个字符的进行。还可以使用getchar()和putchar()函数来实现字符数组中单个字符的输入输出。

2.二维字符数组的输入输出

二维字符数组的每一行可以用来存放一个字符串,因此可以将二维字符数组看成是一个一维数组,数组中的元素为字符串,即被看作是字符串数组。如:

      char ss[3][10];

数组ss可以被看作是用来存放3个字符串的字符串数组,每个字符串的长度不超过9。这时,对数组中字符串的引用,只使用第一个下标。即:

ss[0]:表示第一个字符串的首地址;

ss[1]:表示第二个字符串的首地址;

ss[2]:表示第三个字符串的首地址;

在输入输出时,通过使用“%s”格式说明将非常方便,例如:

例4.3        分析下面程序运行结果。

main( )

{

    char ss[3][10];

    int i;

printf("please input strings:\n");

    for(i=0;i<3;i++)

      scanf(" %s",ss[i]);

      for(i=0;i<3;i++)

     printf(" the No.%d string: %s\n",i+1,ss[i]);

}

数据输入及运行结果为:

please input strings:

Mary   John Smith↙

the No.1 string: Mary

          the No.2 string: John

         the No.3 string: Smith

注意:

l            在scanf()和printf()函数中输入输出字符串时,不能使用ss[i][j],因为ss[i][j]表示是字符元素而不是表示字符串。

l            对字符串数组输出时,如上例ss[i]本身就代表第i行的字符串得首地址,故不能在前面再加“&”。

分享到:
评论

相关推荐

    char、char*、char**数组的区别

    `char*` 数组实际上是指向 `char` 的指针数组,每个元素都是一个指向 `char` 类型的指针。例如: ```c++ char *s2[10]; ``` 这里的 `s2` 是一个可以存储最多10个指向 `char` 的指针的数组。可以通过以下方式初始化:...

    S7-1200中将BYTE类型数据转换成char类型数据的具体方法.docx

    在这个DB块中,我们需要创建两个数组,一个是长度为10的BYTE类型数组,另一个是同样长度的char类型数组。此外,还需要一个索引变量i,用于遍历数组,以及一个STRING变量,用于存储转换后的字符序列。 接下来,在OB1...

    char数组的错误认识

    ### char数组的错误认识 在C/C++编程中,`char`数组是非常常见的数据结构,被广泛用于存储字符串等字符序列。本文将针对一个特定场景中的常见误区进行深入解析,帮助读者更好地理解`char`数组及其操作。 #### 场景...

    最新sort函数的用法.docx

    本文将介绍 sort 函数的用法,包括对 int 类型数组的排序、对 char 类型数组的排序、对结构体数组的排序等。 对 int 类型数组的排序 在 C 语言中,对 int 类型数组的排序可以使用 qsort 函数,该函数可以将数组中...

    详解C语言中Char型指针数组与字符数组的区别

    1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { abc, def, gbk }; for(int i = 0 ; i &lt; strlen(name); i ++){ printf(%s\n, *(name+i)); //printf(%s\n, name[i]); } ...

    Java中char数组(字符数组)与字符串String类型的转换方法

    在Java编程中,字符数组(char数组)和字符串(String类型)是两种常见的数据表示方式,它们在处理文本信息时各有优势。在某些场景下,我们需要在两者之间进行转换,例如在处理用户输入的密码时,`jPasswordField`...

    unsigned char数组转成string 用16进制表示

    总的来说,将`unsigned char`数组转换为16进制`std::string`涉及类型转换、数值的16进制表示以及字符串的构造。这种转换在调试、日志记录、数据传输等方面非常有用,因为它使得原本不可见的二进制数据变得直观易读。

    wav文件转char数组和简易播放.7z

    本话题将详细讲解如何将`wav`文件转换为`char`数组以及实现简易的播放功能。`char`数组在计算机编程中常用于存储和操作数据,特别是对于二进制文件如`wav`,可以方便地读取和处理其内容。 首先,我们需要理解`wav`...

    【C++】 strlen与sizeof计算char* 与char数组(转载记录) - toby1123yjh的博客 - CSDN

    这里 `sizeof(b)` 返回的是 5,因为数组 `b` 包含5个 `char` 类型的元素。 - 对于 `char*` 指针,`sizeof` 返回的是指针本身所占的字节数,而不是指针所指向的字符串的长度。在32位系统上,指针通常为4字节,64位...

    std::string、char*、const char*转托管byte数组或托管字符串String

    std::string是C++的标准字符串类,它可以使用c_str()函数将其转换为char*类型,然后使用Marshal::Copy函数将其拷贝到托管的byte数组中,最后使用System::Text::Encoding::UTF8-&gt;GetString函数将byte数组转换为托管的...

    C#实现char字符数组与字符串相互转换的方法

    在C#编程中,字符数组(char[])和字符串(string)是两种常见的数据类型,它们在处理文本信息时有着广泛的应用。理解如何在两者之间进行转换是非常重要的。本篇文章将详细阐述C#中实现char字符数组与字符串相互转换...

    qsort函数应用大全.doc

    例如,下面是一个对 char 类型数组的排序示例: ```c char word[100]; int cmp( const void *a , const void *b ) { return *(char *)a - *(char *)b; } qsort(word, 100, sizeof(word[0]), cmp); ``` 在上面的...

    C语言合并多个char *类型的字符串

    这里的参数`a`是一个指向`char *`类型的指针数组,意味着它是一个二维数组,每个元素都是一个字符串的首地址。参数`num`则表示`a`数组中字符串的数量。 要合并这些字符串,我们需要创建一个新的字符数组来存储结果...

    图片批量转换为C语言数组

    例如,一个简单的实现方式是将图片数据视为一个大的字节数组,然后逐行读取图片数据并将其转换为C语言的char类型数组。 Python脚本可以先遍历指定目录下的所有图片文件,使用Python的图像处理库如PIL(Python ...

    C库函数qsort七种使用方法示例

    qsort 函数也可以对 char 类型数组进行排序,下面是一个简单的示例代码: ```c char word[100]; int cmp( const void *a , const void *b ) { return *(char *)a – *(char*)b; } qsort(word, 100, sizeof(word[0]...

    c语言教师工资标准管理系统.doc

    系统中,教师信息可采用结构体数组来表示,结构体包含教师的各项属性,如教师号(int类型)、姓名(char类型数组)、性别(char类型)、单位(char类型数组)等。同时,工资相关数据也作为结构体的一部分,以浮点型...

    C++编程之CString、string与、char数组的转换

    C++编程中CString、string和char数组之间的转换是非常重要的知识点,因为它们都是字符串类型,但是它们之间的转换却不是那么直接。本文将详细介绍CString、string和char数组之间的转换方法,并提供相应的代码示例。 ...

    C++中string转换为char*类型返回后乱码问题解决

    问题来源: 在写二叉树序列化与反序列化时发现序列化函数为...第一种:定义一个char数组,数组长度为stringlength+1,将string的内容依次赋值给char数组,最后加上’\0′ ,然后返回char数组名就行了。 第二种:将st

    CString型转char型方法总结

    在C++编程中,我们经常会遇到不同类型的数据转换需求,特别是在处理字符串时,`CString`类型与`char`类型的转换尤其常见。`CString`是MFC(Microsoft Foundation Classes)库中的一个类,它提供了对字符串的方便操作...

Global site tag (gtag.js) - Google Analytics