字符串(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;
}