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

被折叠的 条评论
为什么被折叠?



