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

cpp 复制代码
#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--#

cpp 复制代码
#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

不需要在屏幕上显示信息。

cpp 复制代码
#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;  
}  

描述**】**

处理日志文件,日志文件的储存格式为"年/月/日 时:分:秒 用户名 操作"。

日志文件有多条记录:

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

【提示】

活跃用户指的是在日志文件中有过操作的用户,记得把重复出现的用户去掉。

输出示例只是格式说明,并非正确答案。

cpp 复制代码
#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;  
}

【描述】

以二进制方式打开图片文件并读取该文件中的第 13(从1开始计数,后同),49, 80 个字节处的值,求这3个二进制数按位异或的结果(16进制表示)。

【输入】

图片文件image.jpg。(该文件已经存在,无需自己创建)

【输出】

第 13(从1开始计数,后同),49, 80个字节处3个二进制数按位异或的结果(16进制表示)。

【输入示例】

图片文件image.jpg。

【输出示例】

a9

【提示】

输出示例只是格式说明,并非正确答案。

cpp 复制代码
#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;
}
相关推荐
爱吃喵的鲤鱼几秒前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
7年老菜鸡28 分钟前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Ni-Guvara37 分钟前
函数对象笔记
c++·算法
似霰41 分钟前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
獨枭1 小时前
C++ 项目中使用 .dll 和 .def 文件的操作指南
c++
霁月风1 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
橘色的喵1 小时前
C++编程:避免因编译优化引发的多线程死锁问题
c++·多线程·memory·死锁·内存屏障·内存栅栏·memory barrier
何曾参静谧2 小时前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++
AI街潜水的八角2 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习