C语言 · 字符串变换

算法训练 字符串变换  
时间限制: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,则不需要转换为缩写形式。
输入格式
  一共一行,分别是指代对应操作的数字和字符串,两者以空格分隔,字符串全部由英文字母组成
输出格式
  输出根据上述规则转换后对应的字符串
样例输入
5 ABcdEE
样例输出
a-ee
数据规模和约定
  输入字符串长度最长为200。

作者注释:学会了运用C中的大小写转换函数:toupper(转换成大写)、tolower(转换成小写),头文件:ctype.h。

代码如下:

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 #include<string.h>
 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         else
26             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("
");
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 }
原文地址:https://www.cnblogs.com/panweiwei/p/6550147.html