关注
您的代码主要目的是从用户输入的一行文本中找出最后一个空格后面的字符串(包括空格后无其他字符即整行文本的情况),并计算这部分字符串的长度(不包括末尾的换行符,如果存在的话)。代码基本正确,但有几个地方可以优化或明确其意图:
注释和变量命名:注释和变量命名已经相对清晰,但可以在p = p + 1;后添加注释说明p现在指向第一个字符。
换行符处理:在处理换行符时,您已经正确地检查了换行符的存在并相应地减少了长度。这是正确的做法,因为fgets会将换行符(如果有的话)存储在字符串中。
边界情况处理:当输入为空行时,strrchr将返回NULL,此时p已经是str,即指向字符串的开始。您已经处理了这种情况,很好。
代码整洁性:可以稍微调整代码结构,使其更加紧凑和易于理解。
以下是优化后的代码示例:
c
#include <stdio.h>
(30951)#include <string.h>
int main(void)
{
char str[5000] = {0};
int length = 0;
char *p = NULL;
// 使用fgets从标准输入(stdin)获取一行
fgets(str, sizeof(str), stdin);
// 使用strrchr找到最右边的第一个空格
p = strrchr(str, ' ');
if (p) {
// 如果有空格,则p指向空格后的第一个字符
p++;
} else {
// 如果没有空格,则整个字符串作为目标
p = str;
}
// 使用strchr查找是否存在换行符
if (strchr(p, '\n')) {
// 如果存在换行符,则计算长度时不包括它
length = strlen(p) - 1;
} else {
// 如果没有换行符或字符串以换行符结束但p在换行符之前,则直接使用strlen
length = strlen(p);
}
// 输出结果
printf("%d\n", length);
return 0;
}
这个版本的代码与原始版本在功能上相同,但通过对变量p的更新和注释的添加,使得代码更加易于理解和维护。同时,它保持了原始代码的效率和正确性。
点赞
相关推荐
点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
342837次浏览 3280人参与
# 我的实习求职记录 #
6078782次浏览 83620人参与
# 阿里云管培生offer #
39810次浏览 569人参与
# 地方国企笔面经互助 #
4851次浏览 12人参与
# 职场吐槽大会 #
89808次浏览 740人参与
# 选完offer后,你后悔学本专业吗 #
22495次浏览 160人参与
# 百度开奖 #
193335次浏览 1234人参与
# 运营商笔面经互助 #
92010次浏览 1329人参与
# ai智能作图 #
1401次浏览 35人参与
# 如果有时光机,你最想去到哪个年纪? #
23559次浏览 473人参与
# 海康威视求职进展汇总 #
401741次浏览 3414人参与
# 软件开发2024笔面经 #
2324248次浏览 48206人参与
# 风评不好的公司,你会去吗? #
20535次浏览 94人参与
# 国企还是互联网,你怎么选? #
89793次浏览 697人参与
# 如何一边实习一边秋招 #
998746次浏览 12683人参与
# 腾讯求职进展汇总 #
197813次浏览 1650人参与
# 银行笔面经互助 #
84314次浏览 889人参与
# 第一份工作应该选择高薪还是大平台 #
88740次浏览 590人参与
# bilibili求职进展汇总 #
33734次浏览 360人参与
# 许愿池 #
215289次浏览 2536人参与
# 上班苦还是上学苦呢? #
78488次浏览 725人参与
# 国央企薪资爆料 #
13296次浏览 98人参与