字符串(1)

1.字符串的2种定义方式和底层细节

只要用双引号括起来的都是字符串

2.练习 键盘录入字符并遍历

#include <stdio.h>
int main()
{
        /*
                需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
        */

        //1.键盘录入一个字符串
        //底层逻辑:
        //    程序在运行的时候,首先会创建一个长度为100的字符数组str
        //    在进行键盘录入的时候,会把每一个字符存入到上面的str数组当中,并加上结束标记
        //    在这个过程中,需要修改字符数组的内容,所以第一种方式可以,第二种方式不可以
        char str[100];

        printf("请录入一个字符串\n");
        scanf("%s", str);//str本身就是一个指针,所以不用再加&

        printf("接收到的字符串为:%s", str);

        //2.遍历字符串得到每一个字符

        char* p = str;

        while (1)
        {
                //利用指针获取字符串中的每一个字符,知道遇到\0为止
                char c = *p;

                //判断当前获取到的字符是否为结束标记
                if(c == '\0')
                {
                        //如果是结束标记,循环结束
                        break;
                }
                printf("%c\n", c);
                        //指针往后移动一个位置
                        p++;
        }

                return 0;
        }
3.#include <stdio.h>
int main()
{
    /*
            需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
    */

    //1.键盘录入一个字符串
    //底层逻辑:
    //    程序在运行的时候,首先会创建一个长度为100的字符数组str
    //    在进行键盘录入的时候,会把每一个字符存入到上面的str数组当中,并加上结束标记
    //    在这个过程中,需要修改字符数组的内容,所以第一种方式可以,第二种方式不可以
    char buffer[10];

    printf("请录入一个字符串\n");
    scanf_s("%s", buffer, sizeof(buffer));//str本身就是一个指针,所以不用再加&

    printf("接收到的字符串为:%s\n", buffer);

    //2.遍历字符串得到每一个字符
    //遍历字符串其实就是遍历str这个数组,但是,字符串的内容不知道,所以不能用for循环,
    // 因为不知道循环的次数,也不知道循环的范围,但是能知道每一个字符串的结尾都会有一个\0作为结束标记,
    // 所以要用whie循环






    char* p = buffer;

    while (1)
    {
        //利用指针获取字符串中的每一个字符,知道遇到\0为止
        char c = *p;//先写一个临时变量char c,用他去记录当前指针获取到的数据,
        //在下面就可以对获取到的数据c来做一个判断

        //判断当前获取到的字符是否为结束标记
        if (c == '\0')
        {
            //如果是结束标记,循环结束
            break;
        }
        //打印当前遍历到的字符
        printf("%c\n", c);
        //指针往后移动一个位置
        p++;
    }

    return 0;
}

3.字符串数组

#include <stdio.h>
int main()
{
        /*
               需求:定义一个数组存储5个学生的名字并进行遍历

                   字符串的底层其实就是字符数组
                   把多个字符数组,再放入到一个大的数组当中
                   二维数组
        */

        //1.定义一个二维数组,存储多个学生的名字
        //先写一个char,然后给这个数组起一个名字,比如说就叫做strArr,就表示字符串的数组,
    //既然是一个二维数组,后面要写2个[],第一个表示要存多少个一维数组,第二个表示字符串有多长,可以写大一点
        char strArr[5][100] =
        {
                "zhangsan",
                "lisi",
                "wangwu",
                "zhaoliu",
                "qianqi"
        };

        //2.遍历二维数组
        for (int i = 0; i < 5; i++)
        {
                //i.依次表示二维数组中的每一个索引
                char*str=strArr[i];//利用strArr和索引,就能获取到每一个一维数组,而这里的一维数组,其实就是表示每一个名字
                //然后再把他进行赋值,赋值给一个str的指针,
                printf("%s\n", str);


                //小小的细节:就在通过strArr获取每一个元素的时候,只能复制给指针,如果说再写一个数组,比如说
                //char str[100] =strArr[i],这样子是不行的
                //应该得在后面加{},即:char str[100]={}


        }

        //第二种方式
        //把第五个字符串的指针,放入到一个数组当中
        //指针数组
        char* strArr2[5] =
        {
                "zhangsan",
                "lisi",
                "wangwu",
                "zhaoliu",
                "qianqi"
        };

        //遍历指针数组
        for (int i = 0; i < 5; i++)
        {
                //i:依次表示数组中的每一个索引
                char* str = strArr2[i];
                printf("%s\n", str);
        }

        return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值