校内赛(单词倒置)

单词倒置

Time Limit:1000MS  Memory Limit:65536K
Total Submit:68 Accepted:8

Description

请编制程序实现下面的功能:将一篇英文文章中的以空格或标点符号为分隔的所有单词进行倒排,同时去除标点符号,之后输出已处理的英语文章(应不含标点符号)。

Input

有多组数据,每组一行,每组就是一篇小文章。每篇小文章都由大写字母、小写字母、空格及标点符号组成,遇到#时表示输入结束。

Output

每组输出其对应的字符串,其单独成行。

Sample Input

You He Me
I am a student.
#

Sample Output

Me He You
student a am I
//关键点: 处理将单词倒置外,空格也需要倒置

View Code
#include"iostream"
using namespace std;
int main()
{
char ch[100];
char a[100][100];
char b[100][100];
char ss[100],ee[100];


int i,j;
while(gets(ch))
{
if(strcmp(ch,"#")==0) break;

int L=strlen(ch);
int k=0;
int start=0,end=L;

for(i=0;i<L;i++)
if((ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z')) {start=i ; break;}

for(i=L-1;i>=0;i--)
if((ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z')) {end=i ; break;}

//**********************************
int p=0,q=0;

for(i=0;i<=start;i++)
if(ch[i]<'a'||ch[i]>'z'||ch[i]<'A'||ch[i]>'Z')
{
if(ch[i]==' ')
ss[p
++]=' ';
}
else break;
for(i=L-1;i>=end;i--)
if(ch[i]<'a'||ch[i]>'z'||ch[i]<'A'||ch[i]>'Z')
{
if(ch[i]==' ') ee[q++]=' ';}
else break;
//***********************************

if(q) //末尾有空格
{
for(i=0;i<q;i++)
printf(
"%c",ee[i]);
}
//******************************

for(i=start;i<=end;i++)
{
if(ch[i]==' '||(ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z'))
ch[k
++]=ch[i];
}
//*********************************
memset(a,0,sizeof(a));
memset(b,
0,sizeof(b));
int s=0,t=0;
int f=0,g=0;

for(i=0; i<k; i++) //保证是以字母开始
{
if((ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z')) a[s][t++]=ch[i];
if(ch[i]==' '&&ch[i+1]!=' ')
{
s
++;
t
=0;
}
if(ch[i]==' ') b[f][g++]=' ';
if(ch[i]!=' '&&ch[i+1]==' ')
{
f
++;
g
=0;
}
}
for(i=0;i<=s;i++)
{
printf(
"%s",a[s-i]);
printf(
"%s",b[s-i]);
}
//***************************

if(p) //前面有空格
{
for(i=0;i<p;i++)
printf(
"%c",ss[i]);
}
//**************************
cout<<endl;
}
return 0;
}
原文地址:https://www.cnblogs.com/FCWORLD/p/2012772.html