给定字符串(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 |