字符串空格的压缩
字符串空格的压缩:给定一个字符串,将其中连续出现的空格压缩为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; }
每天明白一点知识