C语言删除一个字符串中的多余空格字符

删除一个字符串中的多余空格字符,使得字符串中的每个单词之间只有一个空格字符

[code=C/C++]
char * my_delblank(char * str,char *newStr)
{
	char * start = str;
	while(*start == ' ')
	{
		start++;
	}
	str = start;
	start = newStr;
	while(*str != '\0' )
	{
		if((*str != ' ' || (*str == ' ' && *(str + 1) != ' ' )))
		{
		  *newStr = *str;
		  str++;
		  newStr++;
		}
		else
		{
			str++;
		}
	}
	*newStr = '\0';
	newStr = start;
	printf(newStr);
	return newStr;
}
[/code]

时间复杂度o(n) n为字符串的长度
空间复杂度o(m) m为字符串的长度

在C语言中,有多种方法可以删除字符串中的空格,以下是一些常见的实现方式: #### 方法一:只保留非空格字符 通过遍历字符串,只将非空格字符复制到原字符串中,最后添加字符串结束符 `'\0'`。 ```c #include <stdio.h> #include <string.h> void fun (char *str) { int i, j = 0; for (i = 0; str[i] != '\0'; i++) { if (str[i] != ' ') { str[j++] = str[i]; } } str[j] = '\0'; } int main() { char str[81]; printf("Input a string:"); gets(str); puts(str); fun(str); printf("*** str: %s\n", str); return 0; } ``` 此方法的核心思想是遍历字符串,当遇到非空格字符时,将其复制到新的位置,最后更新字符串的结束位置。这种方法直接修改原字符串,简单直观,适用于不需要保留原字符串的场景[^2]。 #### 方法二:使用指针操作 利用指针遍历字符串,跳过空格字符,将非空格字符复制到原字符串中。 ```c #include <stdio.h> void del_space(char *s1) { char *s2; s2 = s1; while (*s1) { if (*s1 == ' ') { s1++; } else { *s2 = *s1; s1++; s2++; } } *s2 = '\0'; } int main(int argc, char *argv[]) { char s[] = " abc cd fg"; puts(s); del_space(s); puts(s); return 0; } ``` 该方法使用两个指针 `s1` 和 `s2`,`s1` 用于遍历原字符串,`s2` 用于指向新字符串的位置。当 `s1` 指向空格时,跳过该字符;否则,将 `s1` 指向的字符复制到 `s2` 指向的位置,并移动指针。最后在新字符串末尾添加结束符 `'\0'`。这种方法同样直接修改原字符串,通过指针操作实现,代码简洁高效[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值