zoj1151 Word Reversal (栈——基础练习)

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151 


题意:字符串反转,用栈、STL、C语言都能做,用栈做比较简单明了,不易出错。STL也很好,只是不太熟。


1.栈的做法

#include<stdio.h>
#include<iostream>
#include<stack>
#include<string.h>
using namespace std;
int main(){
    int T,n;
    char s[10100];
    stack<char> sta;
    cin >>T;
    while(T--){
        scanf("%d%*c",&n);//吸收空格
        while(n--){
            gets(s);
            while(!sta.empty())//清空栈
                sta.pop();
            int len=strlen(s);
            for(int i=0;i<len;i++){
                if(s[i]!=' ')   //如果不是空格,入栈
                    sta.push(s[i]);
                else{           //如果是空格,出栈
                    while(!sta.empty()){
                        printf("%c",sta.top());
                        sta.pop();
                    }
                    printf(" ");
                }

                if(i==len-1){//如果这一行结束,则输出栈内结果
                    while(!sta.empty()){
                        printf("%c",sta.top());
                        sta.pop();
                    }
                    printf("\n");
                }
            }
        }
        if(T) printf("\n");
    }
    return 0;
}



2.c++  STL方法

<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
char a[10100],c[10100];
int main(){
    int T,N;
    cin >> T;
    while(T--){
        string s,buf;
        cin >> N;
        getchar();//吸收回车
        while(N--){
            getline(cin,s);
            stringstream ss(s);
            int ok=1;
            while(ss >> buf){
                if(ok) ok=0;    else cout << " ";
                reverse(buf.begin(), buf.end());//字符串反转
                cout << buf;
            }
            cout << "\n";
        }
        if(T) cout << endl;
    }
    return 0;
}</span>

3.C语言做法:

<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[10100],c[10100];
int main(){
    int T,N;
    scanf("%d",&T);
    while(T--){
        scanf("%d%*c",&N);
        while(N--){
            int ok=1;
            gets(a);
            int zero=0;
            for(int i=0;i<strlen(a);i++){
                if(a[i]!=' ') c[zero++]=a[i];
                if(a[i]==' '){
                    for(int j=zero-1;j>=0;j--){
                        if(c[j]==' '&&ok){
                            ok=0;
                        }
                        else
                            printf("%c",c[j]);
                    }
                    printf(" ");
                    zero=0;
                }else if(i==strlen(a)-1){
                    for(int j=zero-1;j>=0;j--)
                            printf("%c",c[j]);
                    printf("\n");
                }
            }
        }
        if(T) printf("\n");
    }
    return 0;
}</span>


你可能感兴趣的:(zoj1151 Word Reversal (栈——基础练习))