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;
}