问题描述
相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了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
样例输出
1 #include <iostream> 2 3 using namespace std; 4 5 // 将字符串全部转换为大写 6 void SetToUpper(char* pszStr_) 7 { 8 while (*pszStr_ != '\0') 9 { 10 if (*pszStr_ >= 'a' && *pszStr_ <= 'z') 11 { 12 *pszStr_ -= 32; 13 } 14 pszStr_++; 15 } 16 } 17 18 // 将字符串全部转换为小写 19 void SetToLower(char* pszStr_) 20 { 21 while (*pszStr_ != '\0') 22 { 23 if (*pszStr_ >= 'A' && *pszStr_ <= 'Z') 24 { 25 *pszStr_ += 32; 26 } 27 pszStr_++; 28 } 29 } 30 31 // 字符串反转 32 void SetToReverse(char* pszStr_) 33 { 34 char* p = pszStr_; 35 char* q = pszStr_; 36 while (*q != '\0') 37 { 38 *q++; 39 } 40 q--; 41 while (*p != *q) 42 { 43 char t = *p; 44 *p = *q; 45 *q = t; 46 p++, q--; 47 } 48 } 49 50 // 将字符串大写转小写、小写转大写 51 void SetToConvert(char* pszStr_) 52 { 53 while (*pszStr_ != '\0') 54 { 55 if (*pszStr_ >= 'a' && *pszStr_ <= 'z') 56 { 57 *pszStr_ -= 32; 58 } 59 else if (*pszStr_ >= 'A' && *pszStr_ <= 'Z') 60 { 61 *pszStr_ += 32; 62 } 63 pszStr_++; 64 } 65 } 66 67 // 字符串压缩 68 void StrCompress(char* pszStr_, char* szResultStr_) 69 { 70 char _c1, _c2; 71 bool _bFlag = false; // 字符串压缩的标志 72 int _nCount = 0; 73 int _nIndex = 0; 74 75 while (*pszStr_ != '\0') 76 { 77 _c1 = *pszStr_; 78 _nCount = 0; 79 while (*pszStr_ != '\0' && *pszStr_ == *(pszStr_ + 1) - 1) 80 { 81 _bFlag = true; 82 _nCount++; 83 pszStr_++; 84 _c2 = *pszStr_; 85 } 86 szResultStr_[_nIndex++] = _c1; 87 if ( _nCount > 1) 88 { 89 szResultStr_[_nIndex++] = '-'; 90 szResultStr_[_nIndex++] = _c2; 91 } 92 else if (_bFlag) // 处理前后两个字符相同,但只有两个字符不能压缩的情况 93 { 94 szResultStr_[_nIndex++] = _c2; 95 } 96 pszStr_++; 97 } 98 } 99 100 int main(void) 101 { 102 int _nChoice = 0; 103 char _szStr[210] = { '0' }; 104 cin >> _nChoice; 105 cin >> _szStr; 106 107 switch (_nChoice) 108 { 109 case 1: 110 { 111 SetToUpper(_szStr); 112 cout << _szStr << endl; 113 } 114 break; 115 116 case 2: 117 { 118 SetToLower(_szStr); 119 cout << _szStr << endl; 120 } 121 break; 122 123 case 3: 124 { 125 SetToReverse(_szStr); 126 cout << _szStr << endl; 127 } 128 break; 129 130 case 4: 131 { 132 SetToConvert(_szStr); 133 cout << _szStr << endl; 134 } 135 break; 136 137 case 5: 138 { 139 SetToLower(_szStr); 140 char _szResult[80] = { '\0' }; 141 StrCompress(_szStr, _szResult); 142 cout << _szResult << endl; 143 } 144 break; 145 146 default: 147 cout << "please input [1-5]!" << endl; 148 break; 149 } 150 return 0; 151 }