hdu ACM step 1.2.2 hdu1062

題目大意:
輸入一串包含空格的字符串,每兩個空格之間、第一個空格之前、最後一個空格之後的字符串進行反轉

大致思路:
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章