1.【描述】
输入10个整数存入文本文件example.txt中,文件每行存放5个整数,每行整数之间用一个空格间隔。行末不能有多余的空格。
【输入】
输入10个整数。
【输出】
生成文件example.txt,里面存放输入的10个整数。
不需要在屏幕上显示整数。
【输入示例】
1 2 3 4 5 6 7 8 9 10
【输出示例】
生成文件example.txt,其中内容:
1 2 3 4
6 7 8 9 10
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<sstream>
#include<vector>
#include<array>
#include<algorithm>
#include<iomanip>
#include<map>
#include<cstdlib>
#include<stdexcept>
#include<numeric>
#include<fstream>
#include<random>
#include<set>
#include<sstream>using namespace std;
int main() { vector<int> numbers(10); for (int i = 0; i < 10; ++i) { cin >> numbers[i]; } ofstream outputFile("example.txt"); for (int i = 0; i < 10; ++i) { outputFile << numbers[i]; if (i % 5 == 4 && i != 9) { outputFile << endl; } else if (i != 9) { outputFile << " ";} } outputFile.close(); return 0;
}
2.【描述】
将一个明文文件plaintext.txt中的内容,按照一定的方法,对每个字符加密后存放到另一个密文文件ciphertext.txt中。
【输入】
文件plaintext.txt。(该文件已经存在,无需自己创建)
注意:本地调试程序时,则要求自己预先建立好plaintext.txt文件。在Windows下,可以使用记事本。
【输出】
生成文件ciphertext.txt,里面存放加密后的信息。
不需要在屏幕上显示信息。
【输入示例】
文件plaintext.txt,假定其中内容如下:
Welcome to C++!
【输出示例】
生成文件ciphertext.txt,加密后的内容如下:
Ygneqog"vq"E--#
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<sstream>
#include<vector>
#include<array>
#include<algorithm>
#include<iomanip>
#include<map>
#include<cstdlib>
#include<stdexcept>
#include<numeric>
#include<fstream>using namespace std;int main() { ifstream inputFile("plaintext.txt");ofstream outputFile("ciphertext.txt");char ch;while(inputFile.get(ch)){ch += 2;outputFile.put(ch);}inputFile.close();outputFile.close();return 0;
}
3.【描述】
声明并实现了一个Rectangle类,表示矩形。Rectangle类包括:
double类型的私有数据成员width和height,表示矩形的宽和高。
带默认参数的构造函数,将矩形的宽和高设置为给定的参数。宽和高的默认参数值为1。
更改器函数setWidth和setHeight,分别用于修改矩形的宽和高。
访问器函数getWidth和getHeight,分别用于访问矩形的宽和高。
成员函数computeArea,返回矩形的面积。
成员函数computePerimeter,返回矩形的周长。
创建5个Rectangle对象(每个Rectangle对象的宽和高分别为1、2、3、4、5)并将它们写入二进制文件object.dat中。修改第3个对象的宽为10、高为3.5,再把修改后的该对象写回文件原位置。
【输入】
没有输入。
【输出】
生成文件object.dat
不需要在屏幕上显示信息。
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<sstream>
#include<vector>
#include<array>
#include<algorithm>
#include<iomanip>
#include<map>
#include<cstdlib>
#include<stdexcept>
#include<numeric>
#include<fstream>using namespace std;class Rectangle {
private: double width; double height; public: Rectangle(double w = 1.0, double h = 1.0) : width(w), height(h) {} void setWidth(double w) { width = w; } void setHeight(double h) { height = h; } double getWidth() const { return width; } double getHeight() const { return height; } double computeArea() const { return width * height; } double computePerimeter() const { return 2 * (width + height); } void writeToStream(std::ostream &os) const { os.write(reinterpret_cast<const char*>(&width), sizeof(width)); os.write(reinterpret_cast<const char*>(&height), sizeof(height)); } void readFromStream(std::istream &is) { is.read(reinterpret_cast<char*>(&width), sizeof(width)); is.read(reinterpret_cast<char*>(&height), sizeof(height)); }
}; int main() { Rectangle rectangles[5] = { Rectangle(1, 1), Rectangle(2, 2), Rectangle(3, 3), Rectangle(4, 4), Rectangle(5, 5) }; std::ofstream outputFile("object.dat", std::ios::binary); for (const auto &rect : rectangles) { rect.writeToStream(outputFile); } outputFile.close(); rectangles[2].setWidth(10); rectangles[2].setHeight(3.5); std::fstream file("object.dat", std::ios::in | std::ios::out | std::ios::binary); file.seekp(2 * sizeof(Rectangle)); rectangles[2].writeToStream(file); file.close(); return 0;
}
4.
【描述】
处理日志文件,日志文件的储存格式为“年/月/日 时:分:秒 用户名 操作”。
日志文件有多条记录:
2015/4/218:00:33 37c3b6b58c6ac3 LOGIN
2015/4/218:15:35 11734e186f24fe4c LOGIN
2015/4/218:34:57 9f3cf331d19a9f LOGIN
2015/4/219:00:29 389bcca2159f5de7 LOGIN
2015/4/219:08:29 c3bde693fdb3c3d LOGIN
……
可以下载日志文件:
https://dodo.hznu.edu.cn/Upload/lab/3084b8184a6f9802/face/6946dcda8d1cdb3/log.txt
【输入】
日志文件log.txt。(该文件已经存在,无需自己创建)
【输出】
日志文件中活跃用户的数量。
【输入示例】
无
【输出示例】
123
【提示】
活跃用户指的是在日志文件中有过操作的用户,记得把重复出现的用户去掉。
输出示例只是格式说明,并非正确答案。
#include <iostream>
#include <fstream>
#include <string>
#include <unordered_set> using namespace std; int main() { ifstream logFile("log.txt"); // 打开日志文件 if (!logFile) { // 检查文件是否成功打开 cerr << "无法打开日志文件 log.txt" << endl; return 1; } unordered_set<string> activeUsers; // 存储活跃用户的集合 string line; // 逐行读取日志文件 while (getline(logFile, line)) { // 找到操作字段的位置 size_t lastSpace = line.rfind(' '); // 找到最后一个空格的位置 if (lastSpace != string::npos) { // 确保找到了空格 // 提取用户名 string username = line.substr(lastSpace + 1); // 从最后一个空格后开始到行尾 // 存储用户名到集合 activeUsers.insert(username); } } logFile.close(); // 关闭文件 // 输出活跃用户的数量 cout << activeUsers.size() << endl; return 0;
}
5.
【描述】
以二进制方式打开图片文件并读取该文件中的第 13(从1开始计数,后同),49, 80 个字节处的值,求这3个二进制数按位异或的结果(16进制表示)。
【输入】
图片文件image.jpg。(该文件已经存在,无需自己创建)
【输出】
第 13(从1开始计数,后同),49, 80个字节处3个二进制数按位异或的结果(16进制表示)。
【输入示例】
图片文件image.jpg。
【输出示例】
a9
【提示】
输出示例只是格式说明,并非正确答案。
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<sstream>
#include<vector>
#include<array>
#include<algorithm>
#include<iomanip>
#include<map>
#include<cstdlib>
#include<stdexcept>
#include<numeric>
#include<fstream>
#include<random>
#include<set>
#include<sstream>using namespace std;int main() {ifstream imageFile("image.jpg", ios::binary); // 以二进制方式打开图片文件if (!imageFile.is_open()) {cerr << "无法打开文件 image.jpg" << endl;return 1;}// 读取指定字节的位置char byte13, byte49, byte80;// 移动到第12个字节(13 - 1),并读取imageFile.seekg(12);imageFile.get(byte13);// 移动到第48个字节(49 - 1),并读取imageFile.seekg(48);imageFile.get(byte49);// 移动到第79个字节(80 - 1),并读取imageFile.seekg(79);imageFile.get(byte80);imageFile.close(); // 关闭文件// 计算按位异或的结果unsigned char result = (static_cast<unsigned char>(byte13) ^static_cast<unsigned char>(byte49) ^static_cast<unsigned char>(byte80));// 输出结果(16进制表示)cout << hex << static_cast<int>(result) << endl;return 0;
}