題目大意:
輸入一串包含空格的字符串,每兩個空格之間、第一個空格之前、最後一個空格之後的字符串進行反轉。
大致思路:
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;
}