微软面试百题009——按词反转句子

来源:互联网 发布:怎样做网络主播 编辑:程序博客网 时间:2024/06/02 04:50

1.问题描述:

翻转句子中单词的顺序。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。

2.解法:

我们先将句子的内容保存下来,然后开辟一个栈,以单词为单位不断的pop出,这是最好考虑也是最噶小的做法了:
附上代码:
#include"iostream"#include"cstdio"#include"cstdlib"#include"cstring"#define N 100using namespace std;class sentence{public:sentence(){memset(juzi,0,sizeof(juzi));memset(result,0,sizeof(result));num=numr=0;}void set(){printf("请输入:\n");for(int i=0;;i++){scanf("%c",&juzi[i]);if(juzi[i]=='.') {num=i-1;break;}}getchar();}void pop(){int i;while(num>=0){int k=num;for(i=num;i>=0;i--) if(juzi[i]==' ') break;    for(int j=i+1;j<=k;numr++,j++,num--) result[numr]=juzi[j];    for(int j=i;juzi[j]==' ';j--,numr++,num--) result[numr]=juzi[j];  //连续空格复制的操作 }}void print(){for(int i=0;i<strlen(result);i++) printf("%c",result[i]);cout<<'.'<<endl;}private:char juzi[N];char result[N];int num;  //兼具了栈的top成员的任务 int numr;};int main(){sentence my;my.set();my.print();my.pop();my.print();return 0;} 
1 0
原创粉丝点击