字符串的操作:字符串变换(蓝桥杯训练系统)

问题描述
  相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了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-4的操作不用说,简单,关键在于第五个,首先要明白加‘-’的地方不止一处,所以就需要遍历字符串才行,定义一个tem[]数组来读取,遇到连续就赋值‘-’,否则就赋值是s[i]即可,同时还不能连续赋值‘-’,这就需要一个if判断tem[t.length - 1]是否为‘-’,判断是否连续还需要一个条件i是否等于s.length-1,如果等于,就直接赋值即可,否则就进入判断是否连续,判断前值后值用 || 来判断,最终最重要的还是数组初始化,,太重要了,,,不然真的会出现一堆莫名其妙的东西。
代码:
 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main(void)
 5 {
 6     int NumOperation;
 7     char s[200];
 8     char tem[400];
 9     int i, j = -1;
10     int k;
11     memset(tem, 0, 400);
12     scanf("%d", &NumOperation);
13     getchar();
14     gets(s);
15 
16     switch (NumOperation)
17     {
18         case 1:
19             for (i = 0; s[i]; i++)
20             {
21                 if (s[i] >= 'a' && s[i] <= 'z')
22                 {
23                      printf("%c", s[i] - 32);
24                 }
25                 else
26                 {
27                      printf("%c", s[i]);
28                 }
29             }
30             break;
31         case 2:
32             for (i = 0; s[i]; i++)
33             {
34                 if (s[i] >= 'A' && s[i] <= 'Z')
35                 {
36                     printf("%c", s[i] + 32);
37                 }
38                 else
39                 {
40                     printf("%c", s[i]);
41                 }
42             }
43             break;
44         case 3:
45             for (i = strlen(s) - 1; i >= 0; i--)
46             {
47                 printf("%c", s[i]);
48             }
49             break;
50         case 4:
51             for (i = 0; s[i]; i++)
52             {
53                 if (s[i] >= 'A' && s[i] <= 'Z')
54                 {
55                     printf("%c", s[i] + 32);
56                 }
57                 else if (s[i] >= 'a' && s[i] <= 'z')
58                 {
59                     printf("%c", s[i] - 32);
60                 }
61             }
62             break;
63         case 5:
64             for (i = 0; s[i]; i++)
65             {
66                 if (s[i] >= 'A' && s[i] <= 'Z')
67                 {
68                     s[i] += 32;
69                 }
70             }
71             int len = strlen(s);
72             for (i = 0; i < len; i++)
73             {
74                 if (i == 0)
75                 {
76                     tem[++j] = s[0];
77                 }
78                 else if (i != len - 1)
79                 {
80                     if (s[i] != s[i - 1] + 1 || s[i] != s[i + 1] - 1)
81                         tem[++j] = s[i];
82                     else if (tem[strlen(tem)-1] != '-')
83                         tem[++j] = '-';
84                 }
85                 else
86                     tem[++j] = s[i];
87             }
88             tem[++j] = '\0';
89             for (i = 0; tem[i]; i++)
90             {
91                 printf("%c", tem[i]);
92             }
93 
94     }
95     return 0;
96 }

 

posted @ 2020-03-17 15:58  Xxaj5  阅读(494)  评论(0编辑  收藏  举报