1. 程式人生 > >算法訓練 字符串變換

算法訓練 字符串變換

fault 文字 light per 大寫 std inpu 兩個 false

問題描述

  相信經過這個學期的編程訓練,大家對於字符串的操作已經掌握的相當熟練了。今天,徐老師想測試一下大家對於字符串操作的掌握情況。徐老師自己定義了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

樣例輸出

  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 }

算法訓練 字符串變換