对于给定的单词集,将每个单词中的字母顺序反转后输出,且不改变原单词集中单词的顺序。

题目描述:
对于给定的单词集,将每个单词中的字母顺序反转后输出,且不改变原单词集中单词的顺序。
输入: 输入样例中包含若干组测试,每组测试样例的第一行给出的是测试的组数T,接下来共T行数据,每行表示一组样例,包含多哥单词,每个单词用空格隔开,且每个单词仅包含大写字母和小写字母。
输出: 每组样例输出一行,即每个单词反转后的结果。
输入样例:3
I am happy today
To be or not to be
I want to win the practice contest
输出样例
I ma yppah yadot
oT eb ro ton ot eb
I tnaw ot niw eht ecitacrp tsetnoc

#include <iostream>
#include <string>
#include "stack"
using namespace std;

void reverse(string a){
    string s;
    stack<char> sk;
    int index;
    while(1){
        index=a.find(" ");//找到空格所在的位置,如果字符串中没有空格则返回-1
        if(index<=0)
            break;
        s=a.substr(0,index);//切割空格前的字符串
        char* r=(char*)malloc(a.length()*sizeof(char));//动态申请char数组
        strcpy(r,s.c_str());//将字符串拷贝到char数组中
        for(int i = 0;i<strlen(r);i++){
            sk.push(r[i]);//数组入栈,因为要倒序输出,借助栈的数据结构
        }
        while(!sk.empty()){
            cout<<sk.top();//出栈输出
            sk.pop();
        }
        cout<<" ";
        a=a.substr(++index,a.length()-1);//分割空格后半部分的字符串
        free(r);
    }
    //break后会剩下最后一部分字符数组,按照上面的方法输出。
    char* r=(char*)malloc(a.length()*sizeof(char));
    strcpy(r,a.c_str());

    for(int i = 0;i<strlen(r);i++){
        sk.push(r[i]);
    }

    while(!sk.empty()){
        cout<<sk.top();
        sk.pop();
    }
    cout<<endl;
}
int main(){
    int n;
    cin>>n;
    getchar();
    /*
     * getchar()函数从STDIN(标准输入)获取并返回下一个字符,如果到达文件尾返回EOF.
       C 执行输入语句,要等到用户输入数据 并 打入 Enter 键后才开始。
       用户打入的数据和 Enter 键 都在 输入 缓冲区 中。
       输入语句 是从 缓冲区 中 依次 取 数。
       下一个输入语句, 先到缓冲区 中 找没读完的数,缓冲区若有数,就取来用,若没有,就等待,一直等到 用户 打入 Enter 键,再开始取数。*/
    for(int i = 0;i<n;i++){
        string str;
        getline(cin,str);
        reverse(str);
    }

}

结果图
题源:天津大学研究生院2015年招收硕士生入学试题——按照要求,使用C++程序编写程序

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值