关注
您的代码主要目的是从用户输入的一行文本中找出最后一个空格后面的字符串(包括空格后无其他字符即整行文本的情况),并计算这部分字符串的长度(不包括末尾的换行符,如果存在的话)。代码基本正确,但有几个地方可以优化或明确其意图:
注释和变量命名:注释和变量命名已经相对清晰,但可以在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的更新和注释的添加,使得代码更加易于理解和维护。同时,它保持了原始代码的效率和正确性。
点赞
相关推荐
11-03 13:11
广东东软学院 游戏后端
后端转测开第一人:再怎么劝退也没用的 某些群体总以为在一个幸存者偏差的软件上看见了极少数秋招上岸某个大厂的个例就幻想上了 事实上自己打开ssob沟通1000+连个小厂面试都没 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 秋招开始捡漏了吗 #
39012次浏览 275人参与
# 找工作八股要背到什么程度? #
5947次浏览 100人参与
# 京东开奖 #
435904次浏览 2467人参与
# 今年秋招是回暖还是遇冷 #
5512次浏览 40人参与
# 我来点评面试官 #
1860次浏览 20人参与
# 你实习是赚钱了还是亏钱了? #
8499次浏览 78人参与
# 用一句话形容你的团队氛围 #
5025次浏览 76人参与
# 你找工作是从容有余 or 匆忙滚爬? #
4099次浏览 46人参与
# 上班后,才发现大学__白学了 #
6838次浏览 41人参与
# 考研人,我有话说 #
149750次浏览 1198人参与
# 同bg的你秋招战况如何? #
161865次浏览 940人参与
# 今年秋招还有金九银十吗 #
27685次浏览 253人参与
# 58同城求职进展汇总 #
38270次浏览 260人参与
# 实习教会我的事 #
34716次浏览 301人参与
# 打工人的精神状态 #
104346次浏览 1323人参与
# 辞职后的日常 #
17215次浏览 84人参与
# 秋招后遗症 #
66756次浏览 422人参与
# 规定下班时间vs实际下班时间 #
57598次浏览 333人参与
# 一人一个landing小技巧 #
129474次浏览 1467人参与
# 学历对求职的影响 #
553396次浏览 3926人参与
# 机械人,你的第一份感谢信是谁给的 #
37572次浏览 346人参与
查看23道真题和解析