C语言 中怎么删除字符串空白符
在C语言中,我们经常需要对字符串进行处理,其中一个常见的操作就是删除字符串中的空白符。空白符包括空格、制表符和换行符等,如果字符串中有过多的空白符,就会影响程序的运行效率和用户的体验,因此需要将其删除。下面就让我们来看一下如何在C语言中删除字符串空白符。
方法一:使用标准库函数
C语言提供了一些常用的标准库函数,如strlen、isspace、strcpy、strncpy、strcat、strncat、strcmp、strncmp和strchr等,其中isspace函数用于检查一个字符是否是空白符,strchr函数用于查找一个字符在字符串中 次出现的位置。这些函数在C++中也可以使用。我们可以利用这些函数来删除字符串中的空白符,具体做法如下:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *delete_spaces(char *str)
{
char *end;
// 去掉字符串开头的空格
while (isspace((unsigned char)*str))
str++;
if (*str == 0) // 如果整个字符串都是空格
return str;
// 去掉字符串末尾的空格
end = str + strlen(str) - 1;
while (end > str && isspace((unsigned char)*end))
end--;
// 写入新结束符号
*(end + 1) = 0;
return str;
}
int main()
{
char str[100];
printf("请输入一个字符串:");
fgets(str, sizeof(str), stdin);
delete_spaces(str);
printf("删除空白符后的字符串是:%s
", str);
return 0;
}
在上面的代码中,我们首先定义了一个delete_spaces函数来删除字符串中的空白符。这个函数接受一个字符串作为参数,返回一个指针。在函数内部,我们使用while循环和isspace函数来去掉字符串开头和末尾的空格。如果整个字符串都是空格,直接返回原始字符串;否则,将新的结束符号写入字符串的末尾,并返回去掉空白符后的字符串。
在主函数中,我们使用fgets函数从键盘读取一个字符串,并调用delete_spaces函数来删除其中的空白符。最后,我们输出删除空白符后的字符串,以便用户查看。
方法二:使用指针操作
除了使用标准库函数外,我们还可以使用指针操作来删除字符串中的空白符。具体做法如下:
#include <stdio.h>
char *delete_spaces(char *str)
{
char *p = str;
// 删除字符串开头的空格
while (*str == ' ' || *str == '\t' || *str == '
')
str++;
// 删除字符串中间的空格
while (*str != 0) {
if (*str == ' ' || *str == '\t' || *str == '
') {
if (*(str - 1) != ' ' && *(str - 1) != '\t' && *(str - 1) != '
')
*p++ = ' ';
} else {
*p++ = *str;
}
str++;
}
// 删除字符串末尾的空格
if (*(p - 1) == ' ' || *(p - 1) == '\t' || *(p - 1) == '
')
*(p - 1) = 0;
else
*p = 0;
return str;
}
int main()
{
char str[100];
printf("请输入一个字符串:");
fgets(str, sizeof(str), stdin);
delete_spaces(str);
printf("删除空白符后的字符串是:%s
", str);
return 0;
}
上面的代码中,我们首先定义了一个delete_spaces函数来删除字符串中的空白符。这个函数接受一个字符串作为参数,返回一个指针。在函数内部,我们使用两个while循环来分别删除字符串开头和末尾的空格,并使用一个for循环来删除字符串中间的空格。在for循环中,我们使用一个指针p来指示新字符串的末尾,遍历原始字符串str,并根据需要将不包含在空白符中的字符添加到新字符串中。
在主函数中,我们使用fgets函数从键盘读取一个字符串,并调用delete_spaces函数来删除其中的空白符。最后,我们输出删除空白符后的字符串,以便用户查看。
总结
在C语言中,我们可以使用标准库函数或指针操作来删除字符串中的空白符。如果希望删除字符串中的其他字符,也可以根据需要进行修改。需要注意的是,在修改字符串内容时,必须确保字符串的长度不会超过其分配的内存大小,否则可能会引起程序崩溃或数据损坏。
