zoukankan      html  css  js  c++  java
  • OpenJudge计算概论-单词翻转

    /*==============================================================
    单词翻转
    总时间限制: 1000ms 内存限制: 65536kB
    描述
        输入一个句子(一行),将句子中的每一个单词翻转后输出
    输入
        只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
    输出
        翻转每一个单词后的字符串
    样例输入
        hello world
    样例输出
        olleh dlrow
    ================================================================*/

    解析:

    这个题和网上流行的单词翻转的题意思不同。网上流传的那个题意思是把句子里面的单词的顺序翻转,单词内字母顺序不变。这个题是把句子里面每一个单词的字母顺序翻转,对整个句子而言,单词的顺序不变。

    处理方法:

    用gets函数读入整个句子到数组a,然后扫描句子:遇到非空格字符存储到b数组,遇到空格字符则把b数组逆序输出。(呵呵这个地方偷懒了一下,其实应该是把b数组翻转在顺序输出b数组的。)

    输出一次b数组后打印一个空格,然后继续扫描a数组重复刚才的过程。

    【关键就在这里了,要打印一个空格。这样以来,假如句子里面单词之间有多个空格时,多个空格还是能保留下来的。假如使用下面第二个程序的处理方法,多个空格只能保留一个空格,于是提交是总是说格式错误。】

    #include<stdio.h>
    #include<string.h>
    //void fun(char a[],int len);//将数组a的前len个字符翻转 
    int main()
    {
        char a[500],b[200];
        int len,i,j,k;
        freopen("5.in","r",stdin);
        gets(a);
        len=strlen(a);
        i=0;
        j=0;
        while(a[i]!='')
        {
            if(a[i]!=' ')
            {//扫描句子,遇到非空格字符则存到b数组 
                b[j]=a[i];
                j++;
            }
            else
            {//扫描句子时遇到空格,逆向输出b数组存贮的那个被逆序的单词 
                for(k=j-1;k>=0;k--)
                {
                    printf("%c",b[k]);
                }
                printf(" ");
                j=0;
            }
            i++;
        }
        for(k=j-1;k>=0;k--)//最后一个单词需要单独处理 
        {
            printf("%c",b[k]);
        }
        printf("
    ");
        return 0;
    }
    /*void fun(char a[],int len)
    {
        int i,j,t=len/2;
        char temp;
        for(i=0,j=len-1;i<t;i++,j--)
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }*/

    下面的代码提交后结果是格式错误(单词之间有多个空格的只保留了一个空格)

    #include<stdio.h>
    #include<string.h>
    void fun(char a[],int len);
    int main()
    {
        char str[500];
        int len;
        freopen("5.in","r",stdin);
        //freopen("5.out","w",stdout);
        scanf("%s",str);
        len=strlen(str);
        fun(str,len);
        printf("%s",str);
        
        while(scanf("%s",str)!=EOF)
        {
            len=strlen(str);
            fun(str,len);
            printf(" %s",str);
        }
        //printf("
    ");
        return 0;
    }
    void fun(char a[],int len)
    {
        int i,j,t=len/2;
        char temp;
        for(i=0,j=len-1;i<t;i++,j--)
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }

    这段代码似乎也没什么办法改进了,毕竟scanf对空格的忽略是个硬伤啊

  • 相关阅读:
    IDEA 启动项目报错 Error:java: java.lang.OutOfMemoryError: GC overhead limit exceeded
    JetBrains 里不为人知的秘密(8) -- 插件篇
    ant-design-vue 之upload 文件上传
    PHP获取IPv4地址
    监控制定程序的CPU和内存开销
    Python字符串转bool函数
    JetsonNano国内环境配置
    局域网主机定时ping实现监控
    无root权限crontab间接实现守护进程
    2020/3/31
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3458803.html
Copyright © 2011-2022 走看看