算法训练 字符串变换
时间限制:1.0s 内存限制:256.0MB
问题描述
相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了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。
作者注释:学会了运用C中的大小写转换函数:toupper(转换成大写)、tolower(转换成小写),头文件:ctype.h。
代码如下:
1 #include2 #include 3 #include 4 void n1(char s[],int len){ 5 for(int i = 0; i < len; i++) { 6 s[i] = toupper(s[i]); 7 } 8 printf("%s",s); 9 }10 void n2(char s[],int len){11 for(int i = 0; i < len; i++) {12 s[i] = tolower(s[i]);13 }14 printf("%s",s);15 }16 void n3(char s[],int len){17 for(int i = len-1; i >= 0; i--) {18 printf("%c",s[i]);19 }20 }21 void n4(char s[],int len){22 for(int i = 0; i < len; i++) {23 if(isupper(s[i]))24 s[i] = tolower(s[i]);25 else26 s[i] = toupper(s[i]);27 }28 printf("%s",s);29 }30 void n5(char s[],int len) {31 for(int i = 0; i < len; i++) {32 s[i] = tolower(s[i]);//全部转换为小写字母33 }34 int i=0,j;35 while(s[i]){36 printf("%c",s[i]);37 if(s[i+1]==s[i]+1 && s[i+2]==s[i+1]+1){38 printf("-");39 for(i=i+3;;i++){40 if(s[i]!=s[i-1]+1){41 printf("%c",s[i-1]);42 break;43 }44 }45 i--;46 }47 i++;48 }49 printf("\n");50 }51 int main() {52 int n;53 scanf("%d",&n);54 char s[200];55 gets(s);56 int len = strlen(s);57 switch(n) {58 case 1://全部转化为大写字母59 n1(s,len);60 break;61 case 2://全部转换为小写字母62 n2(s,len);63 break;64 case 4:65 n4(s,len);66 break;67 case 3:68 n3(s,len);69 break;70 case 5:71 n5(s,len);72 break;73 }74 return 0;75 }