您的代码主要目的是从用户输入的一行文本中找出最后一个空格后面的字符串(包括空格后无其他字符即整行文本的情况),并计算这部分字符串的长度(不包括末尾的换行符,如果存在的话)。代码基本正确,但有几个地方可以优化或明确其意图: 注释和变量命名:注释和变量命名已经相对清晰,但可以在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的更新和注释的添加,使得代码更加易于理解和维护。同时,它保持了原始代码的效率和正确性。
点赞

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 10:46
点赞 评论 收藏
分享
牛客网
牛客企业服务