IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 7-32 说反话-加强版 -> 正文阅读

[开发测试]7-32 说反话-加强版

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例

Hello World Here I Come
结尾无空行

输出样例

Come I Here World Hello
结尾无空行

代码如下

#include <stdio.h>
int main(void){
    char ch[500001];
    gets(ch);
    
    char *p = ch,*last = ch;
    char *ans = NULL;
    int f = 1,F = 0; //f判断是否结束 F判断字符串是否全是空格
    int count = 0,i = 0; //count记录有几个单词
    
    //让p和last指向最后
    while(*p != '\0'){
        if(*p != ' ')
            F = 1; //不全是空格
        p++;
        last++;
    }
    if(F != 0){
        while(f){
            if(last == ch)
                f = 0;
            if(*last != ' ' && *(last-1) == ' ')
                count++; //确定字符串里面单词的个数
            last--;
        }
        f = 1;
        while(f){
            if(*p != ' ' && *(p-1) == ' ' && *p != '\0'){ //如果p指向的位置不是空格或'\0',前一个是空格
                ans = p; //ans指向p的位置
                while(*ans != '\0' && *ans != ' '){
                    printf("%c",*ans);
                    ans++;
                }//输出从p一直到空格或'\0'的内容
                if(ch[0] != ' ') //如果字符串以空格开始
                    printf(" ");
                else{
                    i++;
                    if(i < count){
                        printf(" ");
                    }
                }
            }
            
            if(p == ch) //如果p回到了第一个
            {
                f = 0; //结束
                if(ch[0] != ' '){
                    ans = p; //ans就指向p所指的位置
                    while(*ans != '\0' && *ans != ' '){
                        printf("%c",*ans);
                        ans++;
                    }
                }
            }
            p--; //p向前移动一位
        }
    }
    return 0;
}

运行结果如下
在这里插入图片描述
以上就是本题的解答,但由于数组长度过大,导致运行效率较低。如有更好的解法,欢迎分享在评论区!!!≧???≦

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:07:54  更:2021-08-06 10:08:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 10:10:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码