zoukankan      html  css  js  c++  java
  • 蓝桥杯 字符串变换 字符串操作

    问题描述
      相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了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。
    解题思路:参考自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 }
  • 相关阅读:
    scrum
    control.begininvoke
    ChangeBrowsePosition Method
    常见linux命令(表格分类)
    Python 之优先级排序
    Python 之分辨双胞胎:copy(浅拷贝)与 deepcopy(深拷贝)
    字符编码学习总结
    Python 多继承方式及顺序
    AttributeError: module 'datetime' has no attribute 'now' ------解决方法之一
    Python 模块定义、导入、优化详解
  • 原文地址:https://www.cnblogs.com/fx1998/p/12650003.html
Copyright © 2011-2022 走看看