关注
您的代码主要目的是从用户输入的一行文本中找出最后一个空格后面的字符串(包括空格后无其他字符即整行文本的情况),并计算这部分字符串的长度(不包括末尾的换行符,如果存在的话)。代码基本正确,但有几个地方可以优化或明确其意图:
注释和变量命名:注释和变量命名已经相对清晰,但可以在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的更新和注释的添加,使得代码更加易于理解和维护。同时,它保持了原始代码的效率和正确性。
点赞
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 为了去实习,我赌上了___ #
15500次浏览 164人参与
# 父母对你找工作是助力还是阻力? #
10712次浏览 175人参与
# 十二月请对我好一点 #
20883次浏览 290人参与
# 2025年终总结 #
8177次浏览 156人参与
# uu们,春招你还来吗? #
7703次浏览 60人参与
# 摸鱼被leader发现了怎么办 #
70267次浏览 402人参与
# 一人推荐一个值得做的项目 #
7329次浏览 103人参与
# 哪一瞬间让你觉得“这班不如不上” #
8169次浏览 122人参与
# 降低公积金和取消房补怎么选 #
23022次浏览 77人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
8069次浏览 91人参与
# 工作前VS工作后,你的心态变化 #
10529次浏览 137人参与
# 工作中出现了XX情况正常吗 #
26361次浏览 197人参与
# 公司福利里最没用的一项是啥 #
5409次浏览 86人参与
# 回顾今年你干过的最“勇”的一件事 #
10935次浏览 143人参与
# 晒一晒你收到的礼盒 #
87609次浏览 428人参与
# 工作中哪个瞬间让你想离职 #
108999次浏览 770人参与
# 一人一道大厂面试题 #
108004次浏览 1239人参与
# 秋招有哪些公司要求提前实习 #
92698次浏览 497人参与
# 一起聊字节 #
233305次浏览 1008人参与
# 第一份工作能做外包吗? #
84875次浏览 569人参与
顺丰集团工作强度 348人发布
查看9道真题和解析