问题描述
相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了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,则不需要转换为缩写形式。
徐老师指定的操作如下:
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] = '