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

小明 2025-04-27 22:55:55 5

index.php/tags-41973.html" class="superseo">���奔主题

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

很明显,这就是让结尾的所有换行统统被删除掉

因为结尾可能不止一个 \n 换行符 所以使用while 循环,而不是用if

()

下面直接举例来说明

这是使用 if 实现

#include 
#include 
void remove_trailing_newlines_if(char *s) {
    int len = strlen(s);
    // 使用 if 语句处理末尾的换行符
    if (len >= 1 && s[len - 1] == '\n') {
        s[len - 1] = '
原始字符串: "Hello

"
处理后的字符串: "Hello
"
'; // 将换行符替换为字符串结束符 } } 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; }
#include 
#include 
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] = '
#运行结果
原始字符串: "Hello

"
处理后的字符串: "Hello"
'; // 将换行符替换为字符串结束符 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; }

这是使用 while 实现

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

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

The End
微信