问题描述
相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了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。
解题思路:参考自https://www.cnblogs.com/ZhengLijie/p/12511219.html
只有n=5的情况有点难度,日常眼高手低一写就错。
需要注意几点:
1:加‘-’的地方不止一处,所以就需要遍历字符串。
2:定义一个空字符串用于存储答案,遇到连续就赋值'-',否则就赋值是s[i]即可(这一步有细节需要注意)。同时还不能连续赋值'-',即上一个是'-'就不能再加一个'-'。
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() { 4 int n; 5 string s; 6 cin >> n >> s; 7 if (n == 1) { 8 for (int i = 0; i < s.length(); i++) { 9 if (s[i] >= 'a' && s[i] <= 'z') { 10 s[i] -= 32; 11 } 12 } 13 cout << s << endl; 14 } else if (n == 2) { 15 for (int i = 0; i < s.length(); i++) { 16 if (s[i] >= 'A' && s[i] <= 'Z') { 17 s[i] += 32; 18 } 19 } 20 cout << s << endl; 21 } else if (n == 3) { 22 reverse(s.begin(), s.end()); 23 cout << s << endl; 24 } else if (n == 4) { 25 for (int i = 0; i < s.length(); i++) { 26 if (s[i] >= 'A' && s[i] <= 'Z') { 27 s[i] += 32; 28 } else if (s[i] >= 'a' && s[i] <= 'z') { 29 s[i] -= 32; 30 } 31 } 32 cout << s << endl; 33 } else { //n=5的情况,难点 34 for (int i = 0; i < s.length(); i++) { 35 if (s[i] >= 'A' && s[i] <= 'Z') { 36 s[i] += 32; 37 } 38 } 39 string ans = ""; //存储答案 40 for (int i = 0; i < s.length(); i++) { //遍历字符串 41 if (i == 0) { //如果是第一个 42 ans += s[0]; 43 } else if (i != s.length() - 1) { //如果不是最后一个 44 if (s[i] == s[i - 1] + 1) { //如果这一位和前一位连续 45 if (s[i] + 1!= s[i + 1]) { //如果这一位和这一位的后一位不连续 ,重点重点 46 ans += s[i]; 47 } else if (ans[ans.length() - 1] != '-') { //如果ans上一位不是'-',才加上'-',即不会有--的情况 48 ans += '-'; 49 } else { 50 continue; 51 } 52 } else { //如果这一位和前一位不连续 53 ans += s[i]; //把这一位加入ans 54 } 55 } else { //如果是最后一个 56 ans += s[i]; 57 } 58 } 59 cout << ans << endl; //输出答案 60 } 61 return 0; 62 }