字符数组(数组)

目录

定义

初始化

引用

输入输出

 字符数组的处理函数

strcat

 strncat

strcpy

strncpy

strcmp

strncmp

 strlen

 strstr


我们拿一维字符数组的讲解作为示例,多维的类似于上面的方法。

定义

  • 字符数组的定义格式:char 数组名[常量表达式];
  • 例如:char sz[100];

初始化

  • 字符数组的初始化的方式有两种:

    1. 用字符初始化

      char sz1[5]={‘a’, ‘b’, ‘c’, ‘d’, ‘e’};
      
      • 初始值表中的每个数据项是一个字符,用字符给数组sz1的各个元素初始化。
      • 当初始值个数少于元素个数时,从首元素开始赋值,剩余元素默认为空字符(也叫结束符,用'\0'表示,其ASCII码为0,)。
    2. 用字符串常量初始化

      char sz1[5] = {“abcd”};
      char sz2[5] = “abcd”;
      
      • 字符串常量即用双引号括起来的若干个字符。
      • 字符串常量的长度不能超过数组的长度,其中的每个字符依次为数组的每个元素进行初始化,剩余的元素用空字符'\0'补全。

引用

引用就不多说了,其他类型的数组用法完全一样。

输入输出

  • 输入

    从键盘输入一个字符数组可以使用scanf函数或cin.getline()函数。

    • scanf 函数

      • 格式:scanf("%s", 字符数组名);

      • 说明:

        1. 这里的字符串名称之前不加&。例如:scanf(“%s”,&s1);是错误的。

        2. 系统会自动在输入的字符串常量后添加’\0’作为字符串结束的标志,因此定义字符数组时,要保证数组大小严格大于输入的字符的个数。

        3. 遇到空格、换行符、tab作为一个字符串输入的结束。

          scanf(“%s%s%s”,s1,s2,s3);//从键盘输入Let us go,则三个字符串分别获取了三个单词。
          
    • cin.getline() 函数

      • cin.getline()需要添加头文件#include <iostream>using namespace std;
      • 此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满 N−1N−1 个,或者遇到指定的结束符为止(以先遇到的为准)。若不指定结束符,则默认以回车或EOF作为结束符。具体格式如下:
        1. cin.getline(字符数组名, 字符个数);
        2. cin.getline(字符数组名,字符个数,结束符);
    • 两者的区别:

      1. scanf是以空格、tab或回车作为输入结束的标志

      2. cin.getline则可以读取空格、tab、回车,以限定的长度或结束符来停止输入。

        scanf("%s", sz);//遇到空格、回车、换行或文件结束读入截止
        cin.getline(sz, 50);//读入前49个字符,如果输入少于49遇到回车换行或EOF截止
        cin.getline(sz, 50, 'u');//如果存在字符'u'读到'u'截止,否则读满49字符或提前遇到EOF
        
  • 输出

    输出同样有两种方法

    • printf()函数

      格式:printf("%s", 字符数组名);

      说明:

      1. 用%s格式输出时,printf的输出项必须是字符数组名,而不能是数组元素。例如:printf(“%s”,a[5]);是错误的。
      2. 输出的内容遇到结束符'\0'才会结束。
    • puts()函数

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

      说明:

      1. puts函数输出一个字符串和一个换行符。
      2. 对于已经声明过的字符数组str,printf(“%s\n”, str)和 puts(str)是等价的。

 字符数组的处理函数

strcat

  • 函数原型:char * strcat ( char * destination, const char * source );

  • 功能:

    • source所指向的字符串(包括'\0')复制到destination所指向的字符串后面。
    • 连接时删除destination 后的 '\0'
    • 要保证 destination足够长,以容纳被复制进来的source
    • source中原有的字符不变。
    • 返回指向destination 的指针
  • eg:

    char s[100]="hello",s1[100]="Jerry"
    strcat(s," world");//把字符串" world"复制并连接到字符传s的后面并在后面添加'\0'
    strcat(s,s1);//把字符串s1及最后的'\0'复制并连接到字符传s的后面
    

 strncat

  • 函数原型:char * strncat ( char * destination, const char * source, size_t num );

  • 功能:

    • source 字符串的前num个元素连接到destination 后面。
    • 连接后自动添加终止符'\0'
    • 如果source字符串长度小于num 复制到终止符'\0'为止,包括终止符。
    • source中原有的字符不变。
    • 返回指向destination 的指针
  • eg:

    char s[100]="hello",s1[100]="Jerry"
    strncat(s," world",3);//把字符串前3个字符" wo"复制并连接到字符传s的后面并在后面添加'\0'
    strncat(s,s1,10);//s1的长度不足10,把字符串s1及最后的'\0'复制并连接到字符传s的后面
    

strcpy

  • 函数原型:char * strcpy ( char * destination, const char * source );

  • 功能:

    • 把 source 指向的字符串包括终止符复制到 destination
    • 必须保证 source 足够大,能够容纳下destination,否则会导致溢出错误。
    • source中原有的字符不变。
    • 返回指向destination 的指针
  • eg:

    char s[100]="hello",s1[100]="Jerry"
    strcpy(s,"world");//把字符串"world"复制并覆盖s字符串,在后面追加终止符
    strcpy(s,s1);//把字符串s1包括终止符复制到字符串s,并覆盖s字符串
    

strncpy

  • 函数原型:char * strncpy ( char * destination, const char * source, size_t num );

  • 功能

    • source 字符串的前num个元素拷贝到 destination
    • source 的元素个数少于 num 个拷贝到终止符为止,包括终止符
    • source 的元素个数大于等于num 个,则直接复制这 num 个字符,后面不添加终止符
    • source中原有的字符不变。
    • 返回指向destination 的指针
  • eg:

    char s[100]="hello",s1[100]="Jerry"
    strncpy(s,"world",3);//把字符串"world"前3个字符"wor"复制并覆盖s字符串,在后面不追加终止符
    strcpy(s,s1,10);//把字符串s1包括终止符复制到字符串s,并覆盖s字符串
    

strcmp

  • 函数原型:int strcmp ( const char * str1, const char * str2 );

  • 功能

    • 比较字符串str1str2的大小
    • 从两个字符串的第一个字符开始比较其字符的ASCII
    • 如果同一位置的字符相同接着比较后面的字符,直到不同为止
    • str1<str2时返回负数,相等返回0,大于返回正数
  • eg:

    char s1[100]="hello",s2[100]="Jerry"
    int x = strcmp(s1,s2);//x>0,因为s1[0]>s2[0]
    int x = strcmp("hello,","hello");//x>0,因为两字符串前五个字符相同,s1[5]==' ',而s2[5]=='\0'
    int x = strcmp("hello","hello");//x=0,两字符串相等
    

strncmp

  • 函数原型:int strncmp ( const char * str1, const char * str2, size_t num );

  • 功能

    • 比较字符串str1str2num个字符的大小
    • 从两个字符串的第一个字符开始比较其字符的`ASCII
    • 如果同一位置的字符相同接着比较后面的字符,直到不同或比完前 num个为止
    • str1 的前num个字符 小于str2 的前num 个字符时返回负数,相等返回0,大于返回正数
  • eg:

    char s1[100]="hello",s2[100]="hello,world"
    int x = strcmp(s1,s2,5);//x=0,因为两字符串的前五个字符均相对
    int x = strcmp(s1+1,s2,5);//x<0,因为s1+1的第一个字符为'e',比s2的第一个字符'h'小
    int x = strcmp(s1,s2,10);//x<0,s1是s2的子串
    

 strlen

  • 函数原型:size_t strlen ( const char * str );
  • 功能:
    • 返回字符串数组的长度
    • 从数组起始位置开始计数,直到遇到终止符'\0'为止
    • 字符串长度不包括终止符

 strstr

  • 函数原型:char * strstr (char * str1, const char * str2 );
  • 功能:
    • 如果str2str1的一个子串,则返回一个指向str2str1中首次出现的位置
    • 如果str2不是str1的一个子串,则返回空指针NULL
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值