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

    xiaoxiao2025-02-04  11

    1.问题描述:

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

    2.解法:

    栈 我们先将句子的内容保存下来,然后开辟一个栈,以单词为单位不断的pop出,这是最好考虑也是最噶小的做法了: 附上代码: #include"iostream" #include"cstdio" #include"cstdlib" #include"cstring" #define N 100 using 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; }
    转载请注明原文地址: https://ju.6miu.com/read-1296086.html
    最新回复(0)