• PTA --- Basic Level 1009 说反话


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

    输入格式:

    测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

    输出格式:

    每个测试用例的输出占一行,输出倒序后的句子。

    输入样例:

    Hello World Here I Come
    

    输出样例:

    Come I Here World Hello

    两种解决办法:

    方法一

    #include<stdio.h>
    char xx[80][80];
    int main(){
        int i = 0;
        while( scanf("%s",xx[i]) != EOF){
            i++;
        }
        for(int j = i - 1;j >= 0;j--){
            if(j != 0)
                printf("%s ",xx[j]);
            else
                printf("%s",xx[j]);
        }
    
        return 0;
    }

    不断读取字符串,直到 文件结尾

    EOF 详解

    遇到这个表达式:scanf("%d%d",&a,&b)!=EOF;

    如果a和b都被成功读入,那么上面表达式的结果为2;

    如果只有一个读入,那么上面表达式的结果为1;

    如果a&&b都没有读入,那么上面表达式的结果为0(若a没有读入,则直接放弃b的读入);

    如果遇到错误或者文件结尾,那么上面表达式的结果为EOF,对应的有符号数时-1;

    如果遇到Crrl+Z,那么上面表达式的结果为EOF,对应的有符号数时-1;

    方法二

    由于 scanf()  遇到空白符就会停止输入,截断,而该空白符会被留在缓冲区内,由题目 

     所以,只需要判断   getchar() 是否等于 '  ' ,来决定是否继续读取字符串。

    #include<stdio.h>
    char xx[80][80];
    int main(){
        int i = 0;
        scanf("%s",xx[i]);
        i++;
        while(getchar() == ' '){
            scanf("%s",xx[i]);
            i++;
        }
        for(int j = i - 1;j >= 0;j--){
            if(j != 0)
                printf("%s ",xx[j]);
            else
                printf("%s",xx[j]);
        }
    
        return 0;
    }

    输入字符串时:

    scanf 碰到缓冲区里面的空字符(空格,tab,回车,换行就会截断并添加)

    gets 是要等回车才截断字符串并添加

    比如用输入字符串:abcdefg hijk回车
    用scanf的话,会得到abcdefg,而gets则是:abcdefg hijk

    scanf  遇到空白符后会结束输入,空白符会留在缓冲区!!! 

    可以用 scanf("%[^ ]" , str)   输入一行数据包括空格,直到遇到换行符 ' '

  • 相关阅读:
    用python爬虫抓站的一些技巧总结
    使用python爬虫抓站的一些技巧总结:进阶篇
    Python模块学习:threading 多线程控制和处理
    Redis操作命令总结
    Redis介绍
    linux内核设计与实现笔记 进程调度
    Python常见数据结构整理
    Linux进程调度原理
    Python yield
    Qt之布局管理器
  • 原文地址:https://www.cnblogs.com/expedition/p/11631612.html
Copyright © 2020-2023  润新知