十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
🔥🔥 欢迎来到小林的博客!!
公司专注于为企业提供成都网站设计、成都做网站、微信公众号开发、商城网站制作,成都小程序开发,软件按需规划网站等一站式互联网企业服务。凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,创新互联建站更提供一系列网站制作和网站推广的服务。
🛰️博客主页:✈️小林爱敲代码
🛰️专栏:✈️C语言快速入门
🛰️欢迎关注:👍点赞🙌收藏✍️留言
今天给大家分享C语言中字符串,转义字符,和选择语句这一块内容,让大家在学习的路上更加轻松。感谢大家对我的支持,祝大家学业有成,事业有成 !
每日一句: 只有不断的努力,才能成为梦想中的自己!
大纲:
目录💖4.2 字符串定义
"abcdefg"
这种由双引号(Double Quote)引起来的一串字符称为字符串字面(String Literal),或者简称字符串。字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
"char a[] = "abcde"
这种方法,末尾会自动追加\0"char a[] = {'a','b','c','d','e','\0'}
这种方法,需要手动追加\0,否则字符串会没有结束标志。"char a[20] = {'a','b','c','d','e'}
这种方法,定义了长度为20,那么后面长度不足部分会自动补\0,所以也是可以的。
接下来我们试一下
#includeint main()
{char a[] = "abcde";
char b[] = {'a','b','c','d','e','\0' };
char c[20] = {'a','b','c','d','e' };
printf("a = %s\n", a);
printf("b = %s\n", b);
printf("c = %s\n", c);
return 0;
}
这些都是可以的,但是如果在没有限制的长度的情况下,b是一定要加\0的,否则字符串没有结束标志,会非法访问后面的内容。
字符串没有结束标志,就会访问随即内容。
字符串长度是从第一个字符开始,到\0停止,不包括\0。
char a[] = "abcde"; //从a开始,到e后一个\0结束,长度5
char b[] = {'a','b','c','d','e','\0'};//从a开始,到\0结束,不包括\0,长度5
char c[20] = {'a','b','c','d','e' };//一样,长度5
有一个strlen函数,可以获取一个字符串的长度,我们只需要引入string.h库,即可使用。
#include#includeint main()
{char a[] = "abcde";
char b[] = {'a','b','c','d','e','\0'};
char c[20] = {'a','b','c','d','e' };
printf("lena = %d\n", strlen(a));
printf("lenb = %d\n", strlen(b));
printf("lenc = %d\n", strlen(c));
return 0;
}
我们发现长度都是5,因为后面都有\0作为结束标志,但如果我们把b的\0去掉,那么 b的长度就变成了随机值。
所以字符串的长度是从第一个字符开始,到\0结束,其中不包括\0。
字符串的大小就是它开辟了多少空间,那么大小就是多少。如果定义时没有明确数组开辟多少空间,那么按数组元素个数计算大小。
char a[] = "abcde"; //包括\0 , 6个字节
char b[] = {'a','b','c','d','e'}; //5个字节,元素个数
char c[20] = {'a','b','c','d','e' };//有明确开辟20个空间大小,20字节
sizeof是一个关键字,会返回变量占用空间的大小。
转义字符 | 释义 |
---|---|
\?(不常用) | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\’ | 用于表示字符常量’ |
\“ | 用于表示一个字符内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格字符 |
\f | 进纸符 |
换行符 | |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。 如: \130 X |
\xdd | dd表示2个十六进制数字。 如: \x30 0 |
接下来演示几个转义字符。
#includeint main()
{printf("ABCD\b\n"); //退格+回车,输出ABC换行
printf("ABCD\\\n ");// \加换行,输出ABCD\换行
printf("%d\n",'\010'); //表示8进制的123,输出8回车
printf("%d\n", '\x10');//16进制的ff,16回车
return 0;
}
注意!所有的转义字符,它都只占一个字节。因为转义字符归根结底还是字符!字符占1个字节。
🏀5.2 if单分支人无时无刻都在做选择,程序也需要做选择。当我们期望程序达到某个条件时,就做出不同的选择时。我们就需要选择语句,来控制程序走哪条路。
简单来说,单分支就是你要不要选择这条路。最终的终点是一样的,但中间会不会有小插曲,取决于你的选择。
假如你现在放学了,你可以直接回家。但你也可以选择先去网吧,再回家,而去网吧的这个过程就是你中间的选择。
但是你要去网吧,必须要有个条件,当满足了什么条件时,你才会选择去网吧。如果此时你身上有超过五块钱时,先去网吧,再回家。
所以我们可以用程序来模拟上面的过程。
#includeint main()
{int money = 6; //你身上的钱
if (money >5) //如果你身上的钱超过5块
{//去网吧
printf("去网吧->");
}
//不管如何,你都要回家
printf("回家");
return 0;
}
此时我有6块钱,所以可以去网吧。
但如果我们把 money改成小于5呢? 钱不够了,那就不能去网吧了。只能直接回家了。
那么这时候问题来了,你钱不够,去不了网吧。又不想马上回家,必须要买点东西弥补一下去不了网吧的遗憾。这时就可以用双分支。
因为你不想立刻回家,必须做点事情才回家,那么就没有直接回家这条选项了。
用程序模拟
#includeint main()
{int money = 4; //你身上的钱
if (money >5) //如果你身上的钱超过5块
{//去网吧
printf("去网吧->");
}
else //钱不够,就跳到这来
{printf("去买棒棒糖->");
}
//不管如何,你都要回家
printf("回家");
return 0;
}
当你只有4块钱时
当你有6块钱时
那么这时候你又有要求了。 如果身上的钱超过20块,就去游泳,如果不超过20块钱,但是超过10块钱,就去吃肯德基。如果不超过10块钱,但是超过5块钱,就去网吧。五块钱都没有,那就只能吃棒棒糖了。最后再回家。
那么我们就else if
#includeint main()
{int money = 6; //你身上的钱
if (money >20) //如果你身上的钱超过20块
{//去游泳
printf("去游泳->");
}
else if(money >10)//钱不够20,但是超过10块
{printf("去吃肯德基->");
}
else if (money >5)//钱不够10块,但是超过5块
{printf("去网吧->");
}
else
{printf("去买棒棒糖->"); //五块钱都没有
}
//不管如何,你都要回家
printf("回家");
return 0;
}
21块钱的结果
11块钱的结果
6块钱的结果
4块钱的结果
switch 分支也是多分支,跟 if else的功能是一样的。只不过在某种特定情况,用switch分支会比 if else分支更加直观,更加方便。
假设 你想制定一个计划表,从周一到周日。每一天都做不同的事情。这种情况用 if else会显得很杂乱,代码可读性并不是很好。
if else的写法
#includeint main()
{int weekday = 1; //星期数
if (weekday == 1)
{printf("跑步");
}
else if (weekday == 2)
{printf("爬山");
}
else if (weekday == 3)
{printf("游泳");
}
else if (weekday == 4)
{printf("打游戏");
}
else if (weekday == 5)
{printf("打篮球");
}
else if (weekday == 6)
{printf("踢足球");
}
else if (weekday == 7)
{printf("写作业");
}
return 0;
}
这种频繁的 if else ,看的让人眼花缭乱。 所以在这里推荐用switch分支!!
switch分支的写法
#includeint main()
{int weekday = 1; //星期数
switch (weekday)//weekday是要匹配的值
{//如果weekday = 1,那么会走这条语句的内容
case 1: printf("跑步");
break;
//如果weekday = 2,那么会走这条语句的内容
case 2: printf("爬山");
break;
//如果weekday = 3,那么会走这条语句的内容
case 3: printf("游泳");
break;
//如果weekday = 4,那么会走这条语句的内容
case 4: printf("打游戏");
break;
//如果weekday = 5,那么会走这条语句的内容
case 5: printf("打篮球");
break;
//如果weekday = 6,那么会走这条语句的内容
case 6: printf("踢足球");
break;
//如果weekday = 7,那么会走这条语句的内容
case 7: printf("写作业");
break;
//如果上面都不满足,那么会执行这一条
default:
printf("星期数不存在");
break;
}
return 0;
}
注意!每条case分支必须要加上break语句,否则会接着执行下一条语句。假设我把case1,和case2的break删掉。
我们会发现它会接着往下执行,直到遇到break才结束。
💦💦如果有写的有什么不好的地方,希望大家指证出来,我会不断的改正自己的错误。💯💯如果感觉写的还可以,可以点赞三连一波哦~🍸🍸后续会持续为大家更新大纲上的内容,以及数据结构,C++等方面的知识
🔥🔥你们的支持是我大的动力,希望在往后的日子里,我们大家一起进步!!!🔥🔥
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧