直奔主题
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"
其实,还有一个纠结点,就是源码上面的应该是少了自减变量,要不然就只能迭代循环一次!