码迷,mamicode.com
首页 > 其他好文 > 详细

hd 1062

时间:2016-02-20 10:24:38      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

//法一:用数组保存单词。
      //将不是空格的字符保存在一个数组中,当遇到空格时,将这个数组中的元素从后往前输出。
//法二:用栈。
       //单词反转就是把组成这个单词的字母逆序输出,刚好符合栈的“先进后出,后进先出”特性。压栈时,一次压入一个字符。
法一代码:
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int len;
string s;
void print(int l,int r)
{
    for(int i=r-1;i>=l;i--)
    {
        cout<<s[i];
    }

    if(r!=len) cout<<‘ ‘;
}
int main()
{
    int t;
    cin>>t;
    getchar();//***清空
    while(t--)
    {
        getline(cin,s);//***输入带空格的字符串
        len=s.length();
        s[len]=‘ ‘;//避免字符串判断到是s[len]时讨论
        int l=0,r=0;
        for(int i=0;i<=len;i++)
        {
            if(s[i]==‘ ‘)
            {
                print(l,r);
                r=l=i+1;
            }
            else
            {
                r++;
            }
        }
        cout<<endl;
    }

    return 0;
}

法二代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <stack>
using namespace std;
stack<char>sta;
char s[1005];
int main(){
    int t;
    scanf("%d",&t);
    getchar();//这个要放在while外面 不能放里面
    while(t--){
        gets(s);
        int len=strlen(s);
        s[len]=‘ ‘;
        for(int i=0;i<=len;i++){
            if(s[i]!=‘ ‘){
                sta.push(s[i]);
            }
            else if(s[i]==‘ ‘){
                while(!sta.empty()){
                   printf("%c",sta.top());
                    sta.pop();
                }
                if(i!=len)
                    printf(" ");
                else
                    printf("\n");
            }
        }
    }
    return 0;
}

  

①如何输入

做的过程中发现t=3时,只能输入两个字符串,是因为xx,要加入getchar()。

③这个getchar()一定要放while外面而不是里面

④栈的版本交上去的时候忘记删了调试的内容 WA了一次  切记 调试的内容要删干净再提交

hd 1062

标签:

原文地址:http://www.cnblogs.com/luosuo10/p/5202689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!