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