• HDU 2564 词组缩写


    词组缩写

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 14487    Accepted Submission(s): 4705


    Problem Description
    定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
    比如,C语言里常用的EOF就是end of file的缩写。
     

     

    Input
    输入的第一行是一个整数T,表示一共有T组测试数据;
    接下来有T行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
    单词长度不超过10,由一个或多个空格分隔这些单词。
     

     

    Output
    请为每组测试数据输出规定的缩写,每组输出占一行。
     

     

    Sample Input
    1
    end of file
    Sample Output
    EOF
    Author
    lemon
     

    Source

    分析:这道题有点小坑啊!忘记吸掉换行符,WA了一次!还要注意输出换行!
    以下给出AC代码:
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     int T;
     6     char s[200];
     7     while(cin>>T)
     8     {
     9         getchar();//要注意吸掉回车换行,本人就是这个地方卡了好久,没看出来!
    10         while(T--)
    11         {
    12             gets(s);
    13             int len=strlen(s);
    14             if(s[0]>='a'&&s[0]<='z')
    15             printf("%c",s[0]-32);
    16             else if(s[0]>='A'&&s[0]<='Z') printf("%c",s[0]);
    17             for(int i=1;s[i]!='';i++)
    18                 {
    19                     if(s[i]==' '&&(s[i+1]>='a'&&s[i+1]<='z'))
    20                 printf("%c",s[i+1]-32);
    21                 else if(s[i]==' '&&(s[i+1]>='A'&&s[i+1]<='Z'))
    22                     printf("%c",s[i+1]);
    23                 }
    24                 printf("
    ");
    25         }
    26     }
    27     return 0;
    28 }

    此题出现了一种新的东西,小写字母变大写字母,有一个函数可以很方便的做这道题--strupr()函数!

    strupr,函数的一种,将字符串s转换为大写形式。

    说明:只转换s中出现的小写字母,不改变其它字符。返回指向s的指针
    兼容性说明:strupr不是标准C库函数,只能在VC中使用。在linux gcc环境下需要自行定义这个函数。
    举例:
     1 // strupr.c
     2 #include <stdio.h>
     3 #include <string.h>
     4 int main()
     5 {
     6 char s[]="Copywrite 1999-2000 GGV Technologies";
     7 char* s2=strupr(s);//把s数组中的字符串转换成大写并且返回s用来初始化s2
     8 printf("%s",s2);
     9 printf("%s",s); //这个时候s和s2是相等的,指向同一个字符串。
    10 // 注意:不能使用以下方式调用
    11 // char* p="for test";
    12 // strupr(p);
    13 // 这样调用会产生异常,原因是:指针p 这里定义的是常量字串,而常量字串我们知道是不可以更改的
    14 getchar();
    15 return 0;
    16 }


     

    下面给出另外一种解法:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 char a[120],b[120];
     5 int main()
     6 {
     7     int T;
     8     int i;
     9     int len=0;
    10     int k;
    11     scanf("%d",&T);
    12     getchar();
    13     while(T--)
    14     {
    15         gets(a);
    16         len=strlen(a);
    17         strupr(a);
    18         k=0;
    19         for(i=0;i<len;i++)
    20         {
    21             if(i==0)
    22             {
    23                 if(a[i]==' ' && a[i+1]!=' ')
    24                      b[k++]=a[i+1];
    25                 else if(a[i]!=' ')
    26                     b[k++]=a[i];
    27             }
    28             else 
    29             {
    30                 if(a[i]==' ' && a[i+1])
    31                     b[k++]=a[i+1];
    32             }
    33         }
    34         for(i=0;i<k;i++)
    35         {
    36             if(b[i]!=' ')
    37                 printf("%c",b[i]);
    38         }
    39         printf("
    ");
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    SCCM2012分发脚本
    MPIO配置
    创建快捷方式,修改注册表
    常用口语 一
    3463工厂频道预置方法
    xargs 主要用于不支持管道的shell命令*****
    RDA DEBUG
    linux shell 实例1
    MSD3458开发资料
    MSD6A628开发资料与技术支持
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6391802.html
Copyright © 2020-2023  润新知