题目大意:
输入一串包含空格的字符串,每两个空格之间、第一个空格之前、最后一个空格之后的字符串进行反转。
大致思路:
1.用getchar()读入每个字符,非空格回车字符保存进字符串;读到空格则把字符串反转存进另一个字符串,并在另一个字符串结尾加空格;读到回车则把字符串反转存进另一个字符串,并直接输出。
2.考虑栈,非空格回车字符入栈;读到空格则出栈。
c代码:
#include<stdio.h>
#define MAXN 1000+5
char q[MAXN],ans[MAXN];
int main()
{
char c;
int N,i=0,j=0;
scanf("%d",&N);
getchar(); //吃掉回车
while(N--)
{
c=getchar();
while(c!='\n')
{
if(c!=' ')
q[i++]=c; //不是空格和回车存进字符数组
else
{
for(;i>0;)
ans[j++]=q[--i]; //反转存入另一个字符数组
ans[j++]=' '; //存完后加个空格
}
c=getchar();
}
if(c=='\n')
{
for(;i>0;)
//将字符数组q中的字符串反转,这里i已经重置为0
ans[j++]=q[--i];
for(int k=0;k<j;k++)
printf("%c",ans[k]); //直接输出
}
j=0; //将j重置为0
printf("\n");
}
return 0;
}
c++代码:
#include<cstdio>
#include<stack>
using namespace std;
const int MAXN=1000+5;
char ans[MAXN];
stack<char> q;
int main()
{
char c;
int N;
scanf("%d",&N);
getchar(); //吃掉回车
while(N--)
{
int i=0;
c=getchar();
while(c!='\n')
{
if(c==' ') //读入空格则出栈
{
while(!q.empty())
{
ans[i++]=q.top();
q.pop();
}
ans[i++]=' ';
}
else //不是回车空格则入栈
q.push(c);
c=getchar();
}
if(c=='\n') //读到回车先出栈后直接输出
{
while(!q.empty())
{
ans[i++]=q.top();
q.pop();
}
for(int k=0;k<i;k++)
printf("%c",ans[k]);
}
printf("\n");
}
return 0;
}