字符串面试题

思路:设置一个空格标记符,若标记后再出现空格则记录空格出现的数量,遍历字符串找到一个非空格符后将其前移num位(多余空格的位数)。处理完后,从后往前遍历找到非空格符,将其下一位置为字符串结束标志。代码如下


#include<iostream>
using namespace std;
void DeleteSpace(char *str)
{
	int num=0,len,i;
	bool IsSpace=false;
	len=strlen(str);
	for(i=0;i<len;++i)
	{
		if(str[i]==' ')
		{
			if(!IsSpace)
			{
			   IsSpace=true;
		       if(i==0)//字符为空格
			   {
			       ++num;
			   }
			}
	       else//有了标记
		   {
		       ++num;
		   }
		}
		else//当前字符不是空格
		{
			IsSpace=false;
			str[i-num]=str[i];
			str[i]=' ';
		}
	}
	while(str[--len]==' ')//末尾扫描到第一个非空格符
		str[len+1]='\0';
}

int main()
{
	char string[]=" i am    from   china  ";
	DeleteSpace(string);
	cout<<string<<endl;

	return 0;
}


你可能感兴趣的:(字符串面试题)