字符串空格的压缩

字符串空格的压缩:给定一个字符串,将其中连续出现的空格压缩为1个后,将其中已空格分隔的每个字符串逆序打印出来

解题思路是:第一步先压缩连续出现的空格;第二步实现以空格分隔的每个字符串逆序打印出来

再此,只讲一下第一步的操作:遍历字符串,遇到第一个空格,则给字符数组添加一个空格字符,此时如果后面仍有空格,执行空操作,直到遇到不是空格的,将i的位置进行赋值(后移),如果不是空格,添加进字符数组中,相应的后移。

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;

//字符串的翻转
void reverseString(char a[],int from,int to)
{
    while(from<to)
    {
        char t=a[from];
        a[from++]=a[to];
        a[to--]=t;
    }
}
//以空格隔开 翻转一行字符串
char* StringSpace(char a[])
{
    if(a==NULL)
        return a;
    int len=strlen(a);
    int i,j;
    i=j=0;
    while(a[j]!='\0')
    {
       while(a[j]!='\0'&&a[j]!=' ')
         j++;
       reverseString(a,i,j-1);
       if(a[j]=='\0')
       {
           break;
       }
       ++j;
       i=j;
    }
    return a;
}
//删除连续的空格
void removeSpace(char a[])
{
    int mark=0;
    for(int i=0;i<strlen(a);)
    {
       if(a[i]==' ')
       {
           a[mark++]=' ';
           int ii;
           for(ii=i+1;a[ii]==' ';ii++);
           i=ii;
       }
       else
       {

            a[mark++]=a[i];
            i++;
       }
    }
    a[mark]='\0';
    
}
int main()
{
    char a[100];
    cin.getline(a,100);
    //int len=strlen(a);
    //reverseString(a,0,len-1);
    removeSpace(a);
    StringSpace(a);
    cout<<a<<endl;
    system("pause");
    return 0;
}

 

posted @ 2017-06-06 18:39  泡面小王子  阅读(1153)  评论(0编辑  收藏  举报