c/c++ | 一个开源项目的一个小逻辑引发的思考

直奔主题

while (len >= 1 && s[len - 1] == '\n')
        s[len - 1] = 0;

很明显,这就是让结尾的所有换行统统被删除掉
因为结尾可能不止一个 \n 换行符 所以使用while 循环,而不是用if

下面直接举例来说明

这是使用 if 实现

#include <stdio.h>
#include <string.h>

void remove_trailing_newlines_if(char *s) {
    int len = strlen(s);

    // 使用 if 语句处理末尾的换行符
    if (len >= 1 && s[len - 1] == '\n') {
        s[len - 1] = '\0'; // 将换行符替换为字符串结束符
    }
}

int main() {
    char s[] = "Hello\n\n\n\n\n";
    
    printf("原始字符串: \"%s\"\n", s);

    // 调用函数去除末尾的换行符
    remove_trailing_newlines_if(s);

    printf("处理后的字符串: \"%s\"\n", s);

    return 0;
}

原始字符串: "Hello




"
处理后的字符串: "Hello



"

这是使用 while 实现

#include <stdio.h>
#include <string.h>

void remove_trailing_newlines_while(char *s) {
    int len = strlen(s);
    printf("len:%d ", len );
    // 使用 while 循环去除末尾的换行符
    while (len >= 1 && s[len - 1] == '\n') {
        s[len - 1] = '\0'; // 将换行符替换为字符串结束符
        len--; // 减少字符串长度
    }
}

int main() {
    char s[] = "Hello\n\n\n\n\n";
    
    printf("原始字符串: \"%s\"\n", s);

    // 调用函数去除末尾的换行符
    remove_trailing_newlines_while(s);

    printf("处理后的字符串: \"%s\"\n", s);

    return 0;
}

#运行结果
原始字符串: "Hello




"
处理后的字符串: "Hello"

在线编译器—支持的算力还是挺高的

其实,还有一个纠结点,就是源码上面的应该是少了自减变量,要不然就只能迭代循环一次!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值