美文网首页
C语言-字符数组

C语言-字符数组

作者: 一叶之界 | 来源:发表于2016-12-12 17:56 被阅读0次

    用来存放字符量的数组称为字符数组。

    1 字符数组的定义

    1. 字符数组的定义

    字符数组的定义和整型数组的定义是相同的;

    // 案例1:
    char c[10];
    // 字符数组也有二维数组;
    // 案例2:
    char a[3][4];
    

    字符数组的初始化,字符数组是可以在定义的时候进行初始化的。

    // 案例3:
    char c[10]={'a','v','s'};
    char c1[3]={'a','v','\0'};
    char c2[]={"hello"};
    char c3[10]="hello";
    char c4[]={'a','b','c'};
    char *p="hello";
    

    2.字符数组的引用

    // 案例4:
    #include<stdio.h>
    int main()
    {
        char a[][5]={
            {'h','e','l','l','o'},
            {'w','o','r','l','d'}
        }
        for(int i=0;i<1;i++)
        {
          for(int j=0;j<5;j++)
          {
            printf("%c",a[i][j]);
          }
          printf("\0");
        }
        return 0;
    }
    

    注释:二维数组在初始化时,全部元素赋初值,故一维下标的长度可以不加说明

    3. 字符串和字符串的结束标志'\0'

    在C语言中字符串是没有专门的变量,因此常用一个字符数组表示字符串。字符串总是以“\0”作为字符串的结束。因此,当把一个字符串存入一个数组的时候,也把结束符“\0”存入数组,并作为此字符串的结束标志。有了“\0”标志后,就不会再用字符数组的长度来判断字符串的长度了。
    “\0”在C编译系统自动加上的,由于采用了“\0”标志,所以在用字符串赋初值时,一般无须指定数组的长度,而由系统自行处理。

    4. 字符数组的输入输出

    // 案例5:
    #include<stdio.h>
    int main()
    {
        char string[10];  //定义字符数组,若不初始化,必须说明其长度
        printf("input string:");
        scanf("%s",string); // 输入字符串
        printf("%s\n",string);  // 字符串的输出
        return 0;
    }
    

    注释:
    1.“%s”表示,格式字符串;
    2.定义一个字符串时,若没有进行初始化,则必须说明其长度;
    3.字符数组名string代表字符串的首地址。

    2 字符串的处理函数

    C语言中提供了一些字符串的处理函数,其中包括:输入、输出、合并、修改、比较、转换、复制和搜索八类。使用用输入输出函数,在使用前应包含头文件“stdio.h”,其他的函数应用头文件“string.h”。

    1.字符串的输入输出gets、puts

    格式:
    gets (字符数组名);
    puts (字符数组名);

    功能:
    1.gets从标准输入设备上输入一串字符串;
    2.puts把字符数组中的字符串输出到显示器上,显示该字符串。

    // 案例6:输入输入hello world;
    #include<stdio.h>
    int main()
    {
        char ch[15];
        gets(ch);   // 从键盘输入“hello world”
        puts(ch);   // 显示器显示“hello world”
        return 0;
    }
    

    注释:从上面可以看出,gets函数并不以空格作为字符串输入结束的标志;而以回车作为结束标志。

    2. 求字符串的长度:strlen

    格式:
    strlen(字符数组);

    功能:计算字符串的实际长度,不包括'\0'.

    // 案例7:
    #include<string.h>
    int main()
    {
        char ch1="hello world";
        int k=strlen(ch1);
        printf("The length of ch1 is %d\n",k);
        return 0;
    }
    

    3. 复制字符串:strcpy

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

    功能:
    1.strcpy把字符数组2里面的字符串拷贝到字符数组1中,包括'\0';也就是把字符数组2的字符串给字符数组1。
    2.strncpy字符数组1中的前n个字符,由字符数组2代替。

    // 案例8:
    #include<string.h>
    int main()
    {
     char ch1[30]="hello world!";
     char ch2[30]="nihao!";
     strcpy(ch1,ch2);
     puts(ch1)
     strncpy(ch1,ch2,5);
     puts(ch1);
     return 0;}
    

    4. 连接字符串:strcat

    格式:
    strcat(字符数组1,字符数组2)
    strncat:(字符数组1,字符数组2,长度n)

    功能:
    1.strcat把字符数组2中的字符串链接到字符数组1的字符串后面,并删去字符数组1后面的'\0'。本函数的返回值是字符数组1的首地址。
    2.strncat:拼接制定长度的字符串

    // 案例9:
    #include<string.h>
    int main()
    {
        char ch1[30]="my name is ";
        char ch2[30];
        char ch3[10]="yuan yi";
        printf("input your name:");
        stract(ch1,ch2);
        puts(ch1);
        strnact(ch1,ch3,4);
        puts(ch1);
        return 0;
    }
    

    5. 字符串的比较:strcmp

    格式:
    strcmp(字符数组1,字符数组2);
    strncmp(字符数组1,字符数组2,n);

    功能:
    1.strcmp按照ASCII码顺序比较两组数组中的字符串,并返回比较结果;相等输出0。
    2.strncmp比较两组数组的前n个字符,相等输出0。

    // 案例10:
    #include<string.h>
    int main()
    {
        int k;
        char ch1[20]="hello world";
        char ch2[20]="hello jack";
        k=strcmp(ch1,ch2);
        if(k==0)
        {
          printf("ch1和ch2是相同的\n");
        }
        else
        {
          printf("ch1和ch2是不相同的\n");
        }
        k=strncmp(ch1,ch2,3);
        if(k==0)
        {
          printf("ch1和ch2是相同的\n");
        }
        else
        {
          printf("ch1和ch2是不相同的\n");
        }
        return 0;
    }
    ···
    #3 字符串和指针的关系
    

    char string[10]="hello";
    char *p=string;
    printf ("string=%s\n",p);

    相关文章

      网友评论

          本文标题:C语言-字符数组

          本文链接:https://www.haomeiwen.com/subject/dnmemttx.html