关注
您的代码主要目的是从用户输入的一行文本中找出最后一个空格后面的字符串(包括空格后无其他字符即整行文本的情况),并计算这部分字符串的长度(不包括末尾的换行符,如果存在的话)。代码基本正确,但有几个地方可以优化或明确其意图:
注释和变量命名:注释和变量命名已经相对清晰,但可以在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的更新和注释的添加,使得代码更加易于理解和维护。同时,它保持了原始代码的效率和正确性。
点赞
相关推荐
点赞 评论 收藏
分享
06-30 08:52
广东食品药品职业学院 C++ 
点赞 评论 收藏
分享
06-20 18:53
莆田学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 技术岗笔试题求解 #
77680次浏览 1005人参与
# 拼多多求职进展汇总 #
642399次浏览 4984人参与
# 工作一周年分享 #
30732次浏览 180人参与
# 如果公司给你放一天假,你会怎么度过? #
16301次浏览 122人参与
# 作业帮求职进展汇总 #
55787次浏览 370人参与
# 华子oc时间线 #
1236457次浏览 6473人参与
# OPPO求职进展汇总 #
662228次浏览 5034人参与
# 总结:哪家公司面试体验感最差 #
60508次浏览 273人参与
# 职场上哪些事情令人讨厌 #
18757次浏览 91人参与
# 三一重工求职进展汇总 #
14365次浏览 65人参与
# 去年你投递实习了吗? #
22019次浏览 329人参与
# 这些公司卡简历很严格 #
41315次浏览 204人参与
# 扒一扒那些奇葩实习经历 #
66337次浏览 913人参与
# 经纬恒润求职进展汇总 #
121698次浏览 1032人参与
# 提前批过来人的忠告 #
113910次浏览 1194人参与
# 说说你知道的学历厂 #
58833次浏览 352人参与
# 秋招最大的收获是什么? #
36913次浏览 311人参与
# 找工作时的取与舍 #
80047次浏览 566人参与
# 你认为小厂实习有用吗? #
29528次浏览 341人参与
# 哪一瞬间觉得自己长大了 #
14019次浏览 327人参与