文章目录
- 问题一: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
}
五、感谢
如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。
每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!