给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。

本文介绍了一种高效的字符串处理方法,可以在不使用额外空间的情况下删除字符串两端的空白字符,并将中间的多个连续空白字符合并为一个。该方法适用于ASCII码0-255的字符串数组,通过遍历和替换实现,避免了不必要的内存分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:"   i    am a      little boy.    ",变成"i am a little boy",语言不限,但不要用伪代码作答,函数输入输出请参考如下的函数原型:
1
2
3
C++函数原型:
void FormatString(char str[],int len){
}

思路:首先从开头开始遍历找到第一个不是空格的位置,并且记录为i,从j=0开始依次复制i的元素,如果i为空格,则知道找到第一个不是空格
复杂度 o(N)
   操作依然是基础的字符串搬运,遇到连续空格就省略当前的空格,利用现有数组空间。
   难点在于:头部和尾部的处理。
//#define  xFormatString //给定字符串(ASCII码0-255)数组, 优化
#ifdef xFormatString //no other space;
void FormatString(char str[],int len)
{

 int i=0 , j=0,  k =0;
 while( str[i] == ' ')i++; //find i;
 while( str[i] !='\0')//不要随意的使用while(str[i++])
 {
 if (str[i] == ' ' && str[i+1] == ' ' || str[i+1] == '\0')//完善不容易
 {
 i++;
 continue;
 }
 str[j++] = str[i++];
 }
 str[j]='\0';
}
int main(){
 char a[]=" i    am a      little boy.    ";
 //char a[]="           begin";
 //char a[]="end ";
 //char *pa=a;
 unsigned int len=strlen(a);
 FormatString(a,len);
 printf("%s\n",a);
 system("pause");
 return 0;
}
#endif

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值