嵌入式初学-C语言-十四

#接嵌入式初学-C语言-十三#

字符数组

概念

        元素类型为char字符型的数组,字符数组往往是用来存储字符串数据的。需要注意的一点是,我们C语 言中的字符是字节字符。

字节字符:

        也就是一个字符占1个字节

测试题:

char a = 'A' // 正确 char b = '1' // 正确

char c = 65 // 正确 这是ASCII码编号,对应的值是 'A'

char d = "A" // 错误,这是字符串的写法,也是char数组的写法,char d[1] = "A"

char e = '马' // 错误,中文一个字符超过1一个字节

语法

char 数组名[容量];

char 数组名[行容量][列容量];

 字符数组的语法就是之前所学一维数组和二维数组的语法,只不过数据类型是char而已。

注意:

        如果我们的char数组初始化的时候,没有完全赋完值的时候,空出来的地方使用 \0 进行填充。

 字符案例

案例1:

/**
* 需求:字符数组案例-输出一个字符串(I LOVE YOU!)
*/

#include <stdio.h>

int main()
{
    // 准备一个测试字符串 I LOVE YOU!
    char arr[11] = {'I',' ','L','O','V','E',' ','Y','O','U','!'};
    // 通过一个for循环进行遍历输出
    for(int i = 0;i < sizeof(arr)/sizeof(char);i++)
    {
        printf("%c",arr[i]);
    }
    printf("\n");

    return 0;
}

案例2:

/**
* 需求:字符数组案例-输出一个用字符组成的菱形图案
*/

#include <stdio.h>

int main()
{
    // 准备数据
    char arr[5][5] = {{' ',' ','*',' ',' '},{' ','*',' ','*',' '},{'*',' ',' ',' ','*'},{'
','*',' ','*',' '},{' ',' ','*',' ',' '}};
    // 遍历数组
    for(int i = 0;i < sizeof(arr)/sizeof(arr[0]);i++)
    {
        for(int j = 0;j < sizeof(arr[i])/sizeof(char);j++)
        {
            // 打印菱形
            printf("%c",arr[i][j]);
        }
        // 内层循环每结束一轮,就是一行
        printf("\n");
    }

    printf("\n");

    return 0;
}

字符串和字符串结束标志

说明

字符数组的多样表示

        我们的char数组可以以数组的方式一个个输出每个字符;我们的char数组也可以以字符串的方式整体 进行输出所有字符。具体如下面案例:

/*
需求:字符数组->字符串
*/

#include <stdio.h>

int main()
{
    // 字符串第1种表示:
    char s1[] = {'h','e','l','l','o',' ','w','o','r','l','d'};

    // 字符串第2种表示:
    char s2[] = {"hello world"};

    // 字符串第3种表示:
    char s3[] = "hello world";

    // 测试,使用字符串方式打印,这样就不用一一遍历
    printf("%s\n",s1);
    printf("%s\n",s2);
    printf("%s\n",s3);

    return 0;
}

注意

        1.字符串的长度与字符数组的长度不一定相同。

        2.利用字符串常量可以对字符数组进行初始化,但不能用字符串常量为字符数组赋值。

// 正确写法:利用字符串常量给字符数组初始化
char b[15] = "China";

// 错误写法:利用字符串常量给字符数组赋值
char b[15];
b[15] = "China";

字符串的基础操作

字符串输入

scanf("%s",数组名)

案例:

/*
* 需求:字符数组-字符串的输入输出
*/

#include <stdio.h>

int main()
{
    // 创建一个变量,用来存放人的名字
    char name[20];
    printf("请输入您的姓名:\n");

    scanf("%s",name);// 如果是字符串,这里不是变量地址,是变量名
    printf("您的姓名是:%s\n",name);

    return 0;
}

注意:

        采用scanf进行字符串输入,要求字符串中不能存在空格,否则字符串遇到空格会结束。

fgets(数组名,数组容量,stdin);

说明:

        采用fgets进行字符串输入,可获取所有输入的字符串,包含 \n ,在实际的字符串处理时,我们 可能需要处理 \n

案例:

/*
* 需求:字符数组-字符串的输入输出
*/

#include <stdio.h>

int main()
{
    // 创建一个变量,用来存放人的名字
    char name[20];
    
    printf("请输入您的姓名:\n");
    
    fgets(name,sizeof(name)/sizeof(char),stdin);// 输入,返回地址

    puts(name);// 输出

    return 0;
}

注意:

        1. 如果输入的字符串不包含 空格 和 换行 ,可以使用scanf() | fgets();

        2. 如果输入的字符串需要包含 空格 和 换行 ,只能使用fgets();

        3. 经过对比,我们发现,在字符串的输入中,fgets()更好;

字符串输出

puts(数组名)

案例:

/*
* 需求:字符数组-字符串的输入输出
*/

#include <stdio.h>

int main()
{
    // 创建一个变量,用来存放人的名字

    char name[20];

    printf("请输入您的姓名:\n");

    scanf("%s",name);

    puts(name);// 输出 问题?字符串如何拼接

    printf("您的姓名是:%s\n",name);

    return 0;
}
printf("%s",数组名);

案例:

/*
* 需求:字符数组-字符串的输入输出
*/

#include <stdio.h>

int main()
{

    // 创建一个变量,用来存放人的名字

    char name[20];

    printf("请输入您的姓名:\n");

    scanf("%s",name);

    printf("您的姓名是:%s\n",name);

    return 0;
}

字符串拼接

strcat(数组名,"需要拼接的字符串")

注意:需要引入<string.h>

案例:

/*
* 需求:字符数组-字符串的输入输出
*/

#include <stdio.h>
#include <string.h>

int main()
{

    // 创建一个变量,用来存放人的名字
    char name[20];

    printf("请输入您的姓名:\n");

    fgets(name,sizeof(name)/sizeof(char),stdin);// 输入,返回地址

    puts(strcat(name," 跑着!"));// 拼接

    return 0;
}

字符串拷贝

strcpy(数组名,字符串)

注意:需要引入<string.h> 库

说明:这个方法适合给字符串赋值用。

char str[16] = "杰克" // 初始化,正确

char str[16]; str[16] = "杰克" // 赋值,错误

char str[16]; strcpy(str,"杰克") // 赋值,正确,结果:杰克

 案例:

/*
* 需求:字符数组-字符串的输入输出
*/

#include <stdio.h>
#include <string.h>

int main()
{
    // 创建一个变量,用来存放人的名字
    
    char name[20];

    printf("请输入您的姓名:\n");

    scanf("%s",name);

    strcpy(name,"你好");

    printf("%s\n",name);// 输出

    return 0;
}

字符串比较

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

注意:

        1. 需要引入<string.h>

        2. 返回的结果是boolean

案例:

/*
* 需求:字符数组-字符串的输入输出
*/

#include <stdio.h>
#include <string.h>

int main()
{

    // 创建一个变量,用来存放人的名字
    char username[20];

    printf("请输入您的账户:\n");

    scanf("%s",username);

    if(strcmp(username,"admin"))
    {
        printf("账户输入错误!\n");
    }
    else
    {
        printf("账户输入正确!\n");
    }

    return 0;
}

获取字符串长度

strlen(字符串)

注意:

        1. 需要<string.h>

        2. 返回字符串长度

案例:

/*
* 需求:字符数组-字符串的输入输出
*/

#include <stdio.h>
#include <string.h>

int main()
{

    // 创建一个变量,用来存放人的名字

    char username[20];

    printf("请输入您的账户:\n");

    scanf("%s",username);

    // 获取字符串长度

    unsigned long len = strlen(username);

    if(strcmp(username,"admin"))
    {
        printf("账户输入错误!%lu\n",len);
    }
    else
    {
        printf("账户输入正确!%lu\n",len);
    }

    return 0;
}

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值