您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第六章 数组程序设计 > 【6.3 字符数组案例】

6.3 字符数组案例

 

6.3  字符数组案例

案例6.8  图形图案

【项目任务】

输出一个钻石图形。

                                                           *

                                                         *  *

                                                        *    *

                                                         *  *

                                                           *

【设计思路】

利用二维数组存放字符型变量‘*’或者‘ ’,利用双层循环输出。

【程序代码】

#include <stdio.h>

main()

{

    char diamond[][5]={ {' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},

                      {' ','*',' ','*'},{' ',' ','*'}

                      };

    int i,j;

 

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

    {

        for(j=0;j<5;j++)

            printf("%c",diamond[i][j]);

        printf("\n");

    }

}

【运行结果】

                                                           *

                                                         *  *

                                                        *    *

                                                         *  *

                                                           *

【知识拓展】

1.字符数组的初始化和数值型变量数组的初始化类似,只是每个字符要用‘’括起来。

2.如果给字符串数组赋值的初始值个数比字符串数组的长度短,则将后面的元素自动赋值为‘\0’;即空字符;相反则按语法错误处理。如char string[7]={‘h’,‘e’,‘l’,‘l’,‘o’};,赋值完成后a[0]a[4]被赋值为hello,而后面的a[5]=‘\0’,a[6]=‘\0’

3.如果初始化时,char diamond[ ][5]=…,即第一维没有写数值,则后面的赋值有几行就将diamond赋值成几行。

案例6.9  统计单词个数

【项目任务】

输入一行字符,统计其中有多少个单词,单词之间用空格分隔。

【设计思路】

单词的数目可以由空格出现的次数决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内)。如果测出某一个字符为非空格,而它前面的字符是空格,则表示“新的单词开始了”,此时使num(单词数)累加1。如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不应再累加1。前面一个字符是否为空格,可以从word的值来看:若word等于0,则表示前一个字符是空格;如果word等于1,则意味着前一个字符为非空格。

【程序代码】

#include<stdio.h>

main()

{

    char string[81];

    int i,num=0,word=0;

    char c;

 

    gets(string);

    for(i=0;(c=string[i])!='\0';i++)

        if(c==' ') word=0;

        else if(word==0)

        {

            word=1;

            num++;

        }

    printf("There are %d words in the line.\n",num);

}

【运行结果】

I am a boy!

There are 4 words in the line.

【知识拓展】

1.字符串输入函数gets(string)可以一次性读入屏幕上的一个字符串,并在字符串尾部(而不是初始化时的所有未赋值元素)加上一个'\0',然后放入字符串数组string中。与它相反的有字符串输出函数puts(string)。而字符输入/输出函数则有c=getchar(c)putchar(c)

2.本程序中的for循环中的判断语句(c=string[i])!='\0'做了两个动作:c=string[i],然后判断c!= '\0',这以往使用的i<n不一样。由此看出,for循环的中间部分只要是一个判断语句即可,并不一定是常见的i<n的格式。

3.字符串最后的‘\0’常被作为字符串结束的标志,如程序的循环正是利用'\0'判断出字符串结束的。

4++是自加符号,将前面的操作数自身加1

5.字符串数组的使用要注意两点:一点是字符串数组有效元素的最后是'\0';另一点是字符串数组元素是字符,要用' '修饰。

数组是有序数据的集合,数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一地确定数组中的元素。数组可以帮助我们解决许多现实中的问题,如数列、矩阵等。字符数组还可以用来存放字符串,处理与字符串相关的问题,如将字符串逆序排列,统计单词个数等问题。总的来说,数组是一个非基本数据类型,它可以将多个相同的基本数据类型的数据组织起来,解决实际中的许多问题。