文章目錄
- 問題一:1478 - 出現次數最多的小寫字母
- 問題二:1475 - 字符串對比
- 問題三:1098 - 判斷是否構成回文
- 問題四:1102 - 字符串中的空格移位
- 五、感謝
問題一:1478 - 出現次數最多的小寫字母
類型:字符串
題目描述:
輸入一個由小寫字母組成的字符串(字符數量≤100 ),輸出出現次數最多的小寫字母。
注意:如果有多個小寫字母出現的次數一樣多,則輸出ASCII碼值最大的那個字母。
輸入:
一個字符串。
輸出:
出現次數最多的小寫字母。
樣例:
輸入:
aaabbbbbbbbbcdxs
輸出:
b
1.分析問題
- 已知:一個字符串。
- 未知:出現次數最多的小寫字母。
- 關系:統計。
2.定義變量
- 定義字符數組s用于存儲輸入的字符串,整型數組a用于統計26個小寫字母出現的次數,變量m用于記錄最大出現次數,字符c用于存儲出現次數最多的字符
string s;
int a[26]={0};
int m = 0;
char c;
3.輸入數據
- 從標準輸入讀取一行字符串,存放在字符數組s中
getline(cin,s);// 遍歷字符串s中的每一個字符(假設只包含小寫字母)for (int i = 0; i < s.length(); i++) {// 將當前字符轉換為字母索引(ASCII碼減去97,因為'a'的ASCII碼是97),然后增加對應索引位置的計數器a[s[i] - 97]++;}
4.數據計算
- 遍歷計數器數組a,當遇到計數器不為0且大于或等于已知的最大出現次數時,更新最大出現次數m以及對應的字符c。
// 遍歷整個計數器數組a,查找出現次數最多的字符for (int i = 0; i < 26; i++) {// 如果當前計數器不為0并且大于或等于已知的最大出現次數,則更新最大出現次數以及對應的字符if (a[i] != 0 && a[i] >= m) {m = a[i];c = (char)(i + 97);}}
5.輸出結果
- 輸出變量c,即出現次數最多的字符。
cout << c;return 0; // 程序正常結束,返回0
完整代碼如下:
#include <bits/stdc++.h> // 引入C++標準庫頭文件,包含了大部分常用的輸入輸出和數據處理函數
using namespace std; // 使用std命名空間int main() {// 定義字符數組s用于存儲輸入的字符串,整型數組a用于統計26個小寫字母出現的次數,變量m用于記錄最大出現次數,字符c用于存儲出現次數最多的字符 string s;int a[26]={0}; int m = 0;char c;// 從標準輸入讀取一行字符串,存放在字符數組s中getline(cin,s);// 遍歷字符串s中的每一個字符(假設只包含小寫字母)for (int i = 0; i < s.length(); i++) {// 將當前字符轉換為字母索引(ASCII碼減去97,因為'a'的ASCII碼是97),然后增加對應索引位置的計數器a[s[i] - 97]++;}// 遍歷整個計數器數組a,查找出現次數最多的字符for (int i = 0; i < 26; i++) {// 如果當前計數器不為0并且大于或等于已知的最大出現次數,則更新最大出現次數以及對應的字符if (a[i] != 0 && a[i] >= m) {m = a[i];c = (char)(i + 97);}} // 輸出出現次數最多的字符cout << c;return 0; // 程序正常結束,返回0
}
問題二:1475 - 字符串對比
類型:字符串、藍橋杯
題目描述:
給定兩個僅由大寫字母或小寫字母組成的字符串(長度介于1到100之間),它們之間的關系是以下4種情況之一:
- 1:兩個字符串長度不等。比如 Beijing 和 Hebei
- 2:兩個字符串不僅長度相等,而且相應位置上的字符完全一致(區分大小寫),比如 Beijing 和 Beijing
- 3:兩個字符串長度相等,相應位置上的字符僅在不區分大小寫的前提下才能達到完全一致(也就是說,它并不滿足情況2)。比如 beijing 和 BEIjing
- 4:兩個字符串長度相等,但是即使是不區分大小寫也不能使這兩個字符串一致。比如 Beijing 和 Nanjing
編程判斷輸入的兩個字符串之間的關系屬于這四類中的哪一類,給出所屬的類的編號。
輸入:
包括兩行,每行都是一個字符串。
輸出:
僅有一個數字,表明這兩個字符串的關系編號 。
樣例:
輸入:
BEIjing
beiJing
輸出:
3
1.分析問題
- 已知:兩個字符串。
- 未知:這兩個字符串的關系。
- 關系:字符比較。
2.定義變量
//二、數據定義 string s1,s2;
3.輸入數據
- 通過getline(cin, s1)和getline(cin, s2)分別獲取用戶輸入的兩行字符串。
//三、數據輸入 getline(cin,s1);getline(cin,s2);
4.數據計算
- 使用transform函數配合::tolower將s1和s2中的所有字符轉換為小寫并存入lowerS1和lowerS2中。
string lowerS1 = s1; // 創建一個新的字符串lowerS1作為s1的小寫副本string lowerS2 = s2; // 創建一個新的字符串lowerS2作為s2的小寫副本transform(lowerS1.begin(), lowerS1.end(), lowerS1.begin(), ::tolower); // 將lowerS1中的所有字符轉換為小寫transform(lowerS2.begin(), lowerS2.end(), lowerS2.begin(), ::tolower); // 將lowerS2中的所有字符轉換為小寫
- 根據字符串長度和比較結果輸出對應的數字。
- 如果s1和s2長度不相等,則輸出1。
- 如果s1和s2長度相等且內容完全相同(區分大小寫),則輸出2。
- 如果s1和s2長度相等,內容雖不完全相同但將所有字符轉為小寫后相等,則輸出3。
- 若以上條件都不滿足,則輸出4。
if(s1.length()==s2.length()){if(s1==s2){cout<<2;}else if(lowerS1 == lowerS2){cout<<3;}else{cout<<4;}}else{cout<<1;}
5.輸出結果
//五、輸出結果 return 0;
完整代碼如下:
#include <bits/stdc++.h> // 包含所有標準庫頭文件
using namespace std; // 使用標準命名空間int main() {// 一、分析問題// 已知:有兩個字符串s1和s2// 未知:兩個字符串的關系(長度是否相等,內容是否相同或忽略大小寫后是否相同)// 關系:根據特定規則輸出對應的數字代碼// 二、數據定義 string s1, s2; // 定義兩個字符串變量用于存儲輸入的字符串// 三、數據輸入 getline(cin, s1); // 從標準輸入讀取一行并存入s1(直到遇到換行符)getline(cin, s2); // 同樣方法讀取第二行并存入s2// 四、數據計算 string lowerS1 = s1; // 創建一個新的字符串lowerS1作為s1的小寫副本string lowerS2 = s2; // 創建一個新的字符串lowerS2作為s2的小寫副本transform(lowerS1.begin(), lowerS1.end(), lowerS1.begin(), ::tolower); // 將lowerS1中的所有字符轉換為小寫transform(lowerS2.begin(), lowerS2.end(), lowerS2.begin(), ::tolower); // 將lowerS2中的所有字符轉換為小寫if (s1.length() == s2.length()) { // 如果字符串長度相等if (s1 == s2) { // 若內容完全相同(區分大小寫)cout << 2; // 輸出數字2} else if (lowerS1 == lowerS2) { // 若內容不完全相同但忽略大小寫后相等cout << 3; // 輸出數字3} else { // 其他情況,即長度相等但內容既不全同也不全小寫相等cout << 4; // 輸出數字4}} else { // 若字符串長度不相等cout << 1; // 輸出數字1}// 五、輸出結果 return 0; // 程序執行成功結束,返回值為0
}
問題三:1098 - 判斷是否構成回文
類型:字符串
題目描述:
輸入一串字符,字符個數不超過100 ,且以 . 結束。
判斷它們是否構成回文,如果不含 . 能構成回文輸出 TRUE,否者輸出 FALSE。
輸入:
輸入只有一行,包括一串字符。(測試數據不含空格)。
輸出:
輸出只有一行,TRUE 或者 FALSE 。
樣例:
輸入:
12321.
輸出:
TRUE
1.分析問題
- 已知:一串字符。
- 未知:判斷它們是否構成回文。
- 關系:重新組裝。
2.定義變量
- 定義兩個字符串變量 ins 和 outs。ins 用于存儲用戶輸入的字符序列,outs 用于存放反轉后的字符序列。
//二、數據定義 string ins,outs;
3.輸入數據
- 使用 getline(cin, ins, ‘.’) 從標準輸入接收字符直到遇到句點為止,并將這些字符存入 ins 中。
//三、數據輸入 getline(cin,ins,'.');
4.數據計算
- 通過一個從后向前遍歷 ins 的循環,逐個將 ins 中的字符添加到 outs 的末尾,這樣 outs 就會儲存 ins 的逆序字符串。
//四、數據計算 for(int i=ins.length()-1;i>=0;i--){outs+=ins[i];}
5.輸出結果
- 比較 ins 和 outs 是否相等,如果相等則輸出 “TRUE” 表示輸入的是回文,否則輸出 “FALSE” 表示不是回文。
- 返回0表示程序執行成功且正常退出。
//五、輸出結果 if(ins==outs){cout<<"TRUE";}else{cout<<"FALSE";}return 0;
完整代碼如下:
#include <bits/stdc++.h> // 引入C++標準庫的所有頭文件(一般不推薦在實際項目中使用,應引入具體需要的頭文件)
using namespace std; // 使用std命名空間int main() {// 一、分析問題// 已知:我們有一個輸入字符串ins。// 未知:我們需要判斷這個字符串是否為回文(正讀和反讀相同)。// 關系:通過反轉輸入字符串并進行比較來確定。// 二、數據定義 string ins, outs; // 定義兩個字符串變量,ins用于存儲用戶輸入的字符序列,outs將用于存放ins的逆序字符串// 三、數據輸入 getline(cin, ins, '.'); // 從標準輸入接收字符,直到遇到句點(.)為止,并存入ins變量中// 四、數據計算 for (int i = ins.length() - 1; i >= 0; i--) { // 從ins的末尾開始向前遍歷每一個字符outs += ins[i]; // 將ins中的每個字符依次添加到outs字符串的末尾,從而實現逆轉操作}// 五、輸出結果 if (ins == outs) { // 比較原字符串ins與逆轉后的字符串outs是否相等cout << "TRUE"; // 如果相等,說明ins是回文字符串,輸出"TRUE"} else {cout << "FALSE"; // 否則,說明ins不是回文字符串,輸出"FALSE"}return 0; // 程序執行成功結束,返回值為0
}
問題四:1102 - 字符串中的空格移位
類型:字符串。
題目描述:
輸入一個字符串,將其中的所有空格都移到最前面,然后輸出。
輸入:
一個字符串。如:a□b□c(為了能看清空格,□代表一個空格,但實際測試數據中不用□表示空格)
輸出:
空格全部移到了串前的字符串。如:□□abc
樣例:
輸入:
a b c
輸出:
abc
1.分析問題
- 已知:一個字符串。
- 未知:空格全部移到了串前的字符串。
- 關系:字符重組。
2.定義變量
- s 用于存儲用戶輸入的原始字符串,s1 用于存儲原字符串中的空格字符,s2 用于存儲原字符串中的非空格字符。
//二、數據定義 string s,s1,s2;
3.輸入數據
- 通過 getline(cin, s) 從標準輸入讀取一行字符串(包括空格)存入變量 s。
//三、數據輸入 getline(cin,s);
4.數據計算
遍歷字符串 s 的每一個字符:
- 如果當前字符是空格,則將其添加到字符串 s1 中。
- 否則,將當前字符添加到字符串 s2 中。
//四、數據計算 for(int i=0;i<s.length();i++){if(s[i]==' '){s1+=s[i];}else{s2+=s[i];}}
5.輸出結果
- 遍歷完成后,將包含所有空格的字符串 s1 和包含所有非空格字符的字符串 s2 進行拼接,并輸出結果,此時空格已全部移動到了非空格字符的前面。
- 程序執行完畢后返回0,表示程序正常結束。
//五、輸出結果 cout<<s1+s2;return 0;
完整代碼如下:
#include<bits/stdc++.h>
using namespace std; // 使用std命名空間int main(){// 一、分析問題// 已知:一個字符串。// 未知:將原字符串中的所有空格移動到字符串前面的新字符串。// 關系:通過字符重組實現空格位置的改變。// 二、數據定義string s, s1, s2; // 定義三個字符串變量:// s 用于存儲用戶輸入的原始字符串,// s1 用于存儲原始字符串中的空格,// s2 用于存儲原始字符串中的非空格字符// 三、數據輸入getline(cin, s); // 從標準輸入讀取一行字符串,包括空格,存入變量s// 四、數據計算for(int i = 0; i < s.length(); i++){ // 遍歷字符串s中的每個字符if(s[i] == ' '){ // 當前字符是空格s1 += s[i]; // 將空格添加到s1中} else {s2 += s[i]; // 否則(當前字符為非空格字符),將其添加到s2中}}// 五、輸出結果cout << s1 + s2; // 輸出拼接后的字符串,此時所有空格都在非空格字符之前return 0; // 程序執行成功返回0
}
五、感謝
如若本文對您的學習或工作有所啟發和幫助,懇請您給予寶貴的支持——輕輕一點,為文章點贊;若覺得內容值得分享給更多朋友,歡迎轉發擴散;若認為此篇內容具有長期參考價值,敬請收藏以便隨時查閱。
每一次您的點贊、分享與收藏,都是對我持續創作和分享的熱情鼓勵,也是推動我不斷提供更多高質量內容的動力源泉。期待我們在下一篇文章中再次相遇,共同攀登知識的高峰!