阶段复习
chao_smile 2024/2/23
# 1. 编写一个函数 isPalindrome
,接受一个字符串作为参数,并判断该字符串是否为回文字符串(即正着读和反着读都一样)。然后在 main()
函数中输入一个字符串,调用 isPalindrome
函数判断是否为回文字符串,并输出相应的提示信息
请输入字符串:
// 输入
main
// 输出
输入的不是回文字符串
// 输入
mainniam
// 输出
输入的是回文字符串
- ✅
- 历史解析
- 题解思路正确,本题主要想让考生使用遍历的方式对
string
类型进行字符反转,不过直接调用algorithm
也可以,总体没有问题💯
- 题解思路正确,本题主要想让考生使用遍历的方式对
// 不使用 algorithm 手动遍历参考
#include <iostream>
#include <string>
using namespace std;
// 自定义函数 reverseString,用于反转字符串
string reverseString(const string& str) {
string reversed;
for (int i = str.length() - 1; i >= 0; --i) {
reversed += str[i];
}
return reversed;
}
// isPalindrome 函数用于判断字符串是否为回文字符串
bool isPalindrome(const string& str) {
string reversed = reverseString(str);
return str == reversed;
}
int main() {
string input;
cout << "请输入字符串: ";
getline(cin, input);
if (isPalindrome(input)) {
cout << "输入的是回文字符串" << endl;
} else {
cout << "输入的不是回文字符串" << endl;
}
return 0;
}
# 2. 编写一个程序,生成一个包含 10
个随机整数的数组,然后使用冒泡排序算法对数组进行排序。最后输出排序后的数组
小提示:如果忘记如何生成随机数,可以使用文档查找功能早期的随机数生成案例
- ✅
- 历史解析
- 题解思路正确,本题主要考查使用冒泡排序算法对数组进行排序,没有问题💯
# 3. 编写一个程序,读取一个文本文件(例如 input.txt
),统计读取的文件中每个单词出现的次数,并将结果写入另一个文本文件(例如 output.txt
)。要求忽略单词的大小写,并且输出按单词出现次数降序排列
// input.txt 内容: 随机单词,且每个单词都会单独占用一行,具体求解时自定义 input.txt 满足其条件即可
// 假设 input 内容:
smile
resume
Resume
// 则输出 output 内容:
resume
smile
- ✅
- 历史解析
- 题解思路正确,本题主要考查文件操作以及数组排序,没有问题💯
// 简化版:去除了部分库引用参考
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
// 将字符串转换为小写
string toLowerCase(const string& str) {
string result = str;
for (char& c : result) {
if (c >= 'A' && c <= 'Z') {
c = c - 'A' + 'a'; // 转换为小写
}
}
return result;
}
// 自定义比较函数,用于排序
bool compare(const string& a, const string& b) {
return a > b; // 按照单词从小到大排序
}
// 自定义排序函数
void mySort(vector<string>& vec) {
for (size_t i = 0; i < vec.size() - 1; ++i) {
for (size_t j = 0; j < vec.size() - i - 1; ++j) {
if (compare(vec[j], vec[j + 1])) {
string temp = vec[j];
vec[j] = vec[j + 1];
vec[j + 1] = temp;
}
}
}
}
// 统计单词出现次数
void countWords(const string& filename, vector<string>& wordList) {
ifstream infile(filename);
if (!infile.is_open()) {
cerr << "Unable to open file: " << filename << endl;
return;
}
string word;
while (infile >> word) {
string lowerCaseWord = toLowerCase(word);
bool found = false;
for (const auto& w : wordList) {
if (w == lowerCaseWord) {
found = true;
break;
}
}
if (!found) {
wordList.push_back(lowerCaseWord);
}
}
infile.close();
}
// 写入单词到文件
void writeWords(const vector<string>& wordList, const string& filename) {
ofstream outfile(filename);
if (!outfile.is_open()) {
cerr << "Unable to open file: " << filename << endl;
return;
}
// 自定义排序函数
vector<string> sortedWordList = wordList;
mySort(sortedWordList);
// 写入文件
for (const auto& w : sortedWordList) {
outfile << w << endl;
}
outfile.close();
}
int main() {
vector<string> wordList;
// 统计单词出现次数
countWords("input.txt", wordList);
// 写入单词到文件
writeWords(wordList, "output.txt");
return 0;
}