算法训练 字符串变换

问题描述
  相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了1,2,3,4,5这5个参数分别指代不同的5种字符串操作,你需要根据传入的参数,按照徐老师的规定,对输入字符串进行格式转化。
  徐老师指定的操作如下:
  1 表示全部转化为大写字母输出,如abC 变成 ABC
  2 表示全部转换为小写字母输出,如abC变成abc
  3 表示将字符串整个逆序输出,如 abc 变成 cba
  4 表示将字符串中对应的大写字母转换为小写字母,而将其中的小写字母转化为大写字母输出,如 abC变成ABc
  5表示将全部转换为小写字母,并将其中所有的连续子串转换为对应的缩写形式输出,比如abcD 转换为a-d,其次,-至少代表1个字母,既如果是ab,则不需要转换为缩写形式。
输入格式
  一共一行,分别是指代对应操作的数字和字符串,两者以空格分隔,字符串全部由英文字母组成
输出格式
  输出根据上述规则转换后对应的字符串
样例输入
5 ABcdEE
样例输出
a-ee
数据规模和约定
  输入字符串长度最长为200。
测试代码
  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 void getUpper(char *str)
  5 {
  6     int i = 0;
  7     while (str[i])
  8     {
  9         if (str[i] >= 'a' && str[i] <= 'z')
 10         {
 11             str[i] -= 32;
 12         }
 13         i++;
 14     }
 15     puts(str);
 16 }
 17 
 18 void getLower(char *str)
 19 {
 20     int i = 0;
 21     while (str[i])
 22     {
 23         if (str[i] >= 'A' && str[i] <= 'Z')
 24         {
 25             str[i] += 32;
 26         }
 27         i++;
 28     }
 29     puts(str);
 30 }
 31 
 32 void getReverse(char *str)
 33 {
 34     int len = strlen(str) - 1;
 35     while (len >= 0)
 36     {
 37         printf("%c", str[len--]);
 38     }
 39     printf("\n");
 40 }
 41 
 42 void getTra(char *str)
 43 {
 44     int i = 0;
 45     while (str[i])
 46     {
 47         if (str[i] >= 'A' && str[i] <= 'Z')
 48         {
 49             str[i] += 32;
 50         }
 51         if (str[i] >= 'a' && str[i] <= 'z')
 52         {
 53             str[i] -= 32;
 54         }
 55     }
 56     puts(str);
 57 }
 58 
 59 void getAbb(char *str)
 60 {
 61     int flag = 0;
 62     int i = 0;
 63     while (str[i])
 64     {
 65         if (str[i] >= 'A' && str[i] <= 'Z')
 66         {
 67             str[i] += 32;
 68         }
 69         i++;
 70     }
 71     printf("%c", str[0]);
 72     for (i = 1; i < strlen(str); i++)
 73     {
 74         while (str[i] - str[i - 1] == 1)
 75         {
 76             flag++;
 77             i++;
 78         }
 79         if (flag > 1)
 80         {
 81             printf("-%c", str[--i]);
 82         }
 83         else
 84         {
 85             printf("%c", str[i]);
 86         }
 87         flag = 0;
 88     }
 89     printf("\n");
 90 }
 91 
 92 int main()
 93 {
 94     int n;
 95     char str[220];
 96     scanf("%d%s", &n, str);
 97     switch (n)
 98     {
 99     case 1:
100         getUpper(str);
101         break;
102     case 2:
103         getLower(str);
104         break;
105     case 3:
106         getReverse(str);
107         break;
108     case 4:
109         getTra(str);
110         break;
111     case 5:
112         getAbb(str);
113     }
114     return 0;
115 }

 

posted @ 2016-05-25 15:25  新生代黑马  阅读(1421)  评论(0编辑  收藏  举报