去掉字符串中所有空格的若干解法
题目:编写函数,去掉字符串中的所有空格。
参考解答如下:
/////////////////////////////////////////////
// 去掉字符串中的空格
// 本程序用5中方法实现
// zhao,xjtu
// 2012.4.14
//////////////////////////////////////////////////
#include<iostream>
using namespace std;
//去掉字符串中的空格1
//每从前开始,每到一个空格,就将后面的字符逐个前移一个位置。
char *alltrim(char *str)
{
char *p=str;
while(*p!=0) //没有结束,循环
{
if(*p==' ') //遇到空格处理
{
char *q=p; //从空格处开始
while(*q!=0) //直到末尾的所有字符
{
*q=*(q+1); //逐次前移
q++; //每移一个字符,指针加1,准备移下一个字符
}
}
else //当前字符不是空格
{
p++; //指针后移,指向待检查的新字符
}
}
return str;
}
//去掉字符串中的空格2,递归
//到一个空格,将后面的字符逐个前移,去掉一个空格
//去掉一个空格的字符串,可以看做新的字符串,还是用上面的方法,递归。
char *alltrim2(char *str)
{
char *p=str;
while(*p!=0 && *p!=' ') //到第1个空格或到结束
{
p++;
}
//如果到空格
if(*p==' ')
{
//处理空格
while(*p!=0) //直到末尾的所有字符
{
*p=*(p+1); //逐次前移
p++; //每移一个字符,指针加1,准备移下一个字符
}
alltrim2(str); //将去掉完一个空格符的字符串看做新的字符串,再调用本函数,递归
}
return str; //没有空格了,返回没有空格的字符串首地址
}
//去掉字符串中的空格3
//将非空格字符依次移到一个临时数组中,就是去掉空格的字符串
//然后在将临时数组中的字符串移回到原字符数组中
char *alltrim3(char *str)
{
char *p=str;
char *tmp;
char *q;
int N=0;
//求字符串的长度
while(*p!=0)
{
N++;
p++;
}
//申请存放字符串的临时空间
tmp=new char[N+1];
//都从头开始
p=str;
q=tmp;
while(*p!=0)//直到结束
{
if(*p!=' ') //是空格的话
{
*q=*p; //放到临时空间中
q++; //临时空间指针加1
}
p++; //原字符串指针加1
}
*q=0; //最后放结束符
//将临时空间中无空格的字符串放回原字符串中
q=tmp; //指针都从头开始
p=str;
while(*q!=0) //直到结束
{
*p=*q; //从临时空间放回原字符串中
q++; //两个指针都加1
p++;
}
*p=0; //最后放结束符
delete []tmp; //释放动态申请的空间
return str;
}
//去掉字符串中的空格4
//c从头开始,到一个空格,将后面的字符前移一个位子,去掉一个空格
//再从头开始,空格。
//如果从头开始没有到空格,return结束函数。
//flag=1.表示有空格
//flag=0,表示无空格
char *alltrim4(char *str)
{
char *p;
int flag=1;
while(flag) //
{
p=str; //从头开始
flag=0; //假设无空格
while(*p!=0) //逐个检查
{
if(*p==' ') //到空格
{
flag=1; //表示有空格
while(*p!=0) //处理一个空格
{
*p=*(p+1); //后面字符前移
p++;
}
}
else
p++;
}
}
return str;
}
// delete blanks just among words,not at the begining or at the end.
//去掉字符串中的空格5
//只删除中间的空,不删开始和末尾的空格
//空出前面的空格,到末尾不是空格的字符指针,作为处理的界限
char *alltrim5(char *str)
{
char *p=str;
char *end;
//开始的空格不处理
while(*p==' ')
p++;
//find the last character that is not blank.
//末尾不是空格的字符
end=str;
while(*end!='\0')
end++;
end--;
while(*end==' ')
end--;
//
while(p<end) //不越界,逐个检查
{
if(*p==' ' && p<end) //到空格,且不是末尾的空格
{
char *q=p;
while(*q!=0) //处理,后面的字符前移,包括末尾的空格
{
*q=*(q+1); //后面的字符前移,包括末尾的空格
q++;
}
end--; //中间删掉一个空,末尾指针也前移一个位置
}
else
{
p++;
}
}
return str;
}
void main()
{
//char s[100];
int n=100;
char *s;
// cin>>n;
// (c);
s=new char[n]; //动态申请数组
cout<<"Please input a string\n";
line(s,100);
cout<<"|"<<s<<"|\n";
//alltrim5(s);
//cout<<"|"<<s<<"|\n";
cout<<"|"<< alltrim5(s)<<"|\n"; //可以调用alltrim1()...alltrim5()
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论