hznu.dodo C++ 实验A 文件

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值