美文网首页
string的内容存储到文件中

string的内容存储到文件中

作者: 微雨旧时歌丶 | 来源:发表于2017-12-27 15:26 被阅读0次

// C++ Primer Plus 794页,习题7
/*
 该程序将键盘输入读取到一个由string对象组成的vector中,
 将字符串内容(而不是string对象)存储到一个文件中,
 然后该文件的内容复制到另一个由string对象组成的vector中。
*/

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>

// 输出string 的函数
void ShowStr(const std::string &s) {
    std::cout << s << std::endl;
}

// 将字符串信息写入到文件中
class Store {
private:
    std::ofstream &fout;
public:
    Store(std::ofstream &os) :fout(os) {};
    void operator()(const std::string &str) {
        size_t len = str.size(); // size的返回类型,len存储字符串的长度
        fout.write((char*)&len, sizeof(std::size_t)); // 先存储长度,

        fout.write(str.data(), len); // 这里是指定字符数,把字符串不包括'\0'写入文件
    }
};

// 根据文件恢复信息
void GetStrs(std::ifstream &fin, std::vector<std::string> &vec) {
    size_t len; // 使用read来获取长度
    while (fin.read((char *)&len, sizeof(size_t))) {
        // 这里要知道循环条件就是字符数
        char *str = new char[len];
        fin.read(str, len);
        str[len] = '\0';  //人为添加空字符
        vec.push_back(str);

    }
}

int main() {
    using namespace std;
    vector<string> vostr; //string 向量
    string temp;

    // 键盘输入string
    cout << "请输入strings(空行退出):\n";
    while (getline(cin, temp) && temp[0] != '\0')
        vostr.push_back(temp);
    cout << "您的输入如下::\n";
    for_each(vostr.begin(), vostr.end(), ShowStr);

    // 存储string的内容到文件
    ofstream fout("strings.dat", ios::out);
    for_each(vostr.begin(), vostr.end(), Store(fout));
    fout.close();

    // 复制文件内容到另一个由string对象组成的vector中
    vector<string> vistr;
    ifstream fin("strings.dat", ios::in);
    if (!fin.is_open()) {
        cerr << "无法打开输入文件。\n";
        exit(EXIT_FAILURE);
    }
    GetStrs(fin,vistr);
    fout.close();
    cout << "\n从文件中读取的字符串如下:\n";
    for_each(vistr.begin(), vistr.end(), ShowStr);
    return 0;
}

相关文章

  • string的内容存储到文件中

  • Android数据存储

    一、文件存储 1、将文件存储到文件中 Context类中提供了一个openFileOutput(String na...

  • MySQL常用存储引擎之CSV

    存储特点 数据以文本方式存储在文件中 .csv文件存储表内容 .csv文件存储表的元数据如表状态和数据...

  • python读文件-20170905

    1.主要功能:(1)读取txt文件,(2)将文件内容存储到excel中 python读取文件时提示"Unicode...

  • 算法笔记(11)| STL之string

    string即在c++中存储字符串的集合。在使用时需要添加#include 头文件。 1.string的定义 2....

  • 第六章--数据存储方案

    1.文件存储 将数据存储到文件中Context类中提供一个openFileOutput方法,可存数据到文件中,接收...

  • 1 java常用类,枚举和注解

    String 中通过字面量来初始化的时候,都会将值存储到常量池中,常量池是不会存储相同内容字符串的,当对字符串引用...

  • 数据存储之归档

    归档 NSKeyedArchiver : 序列化,把对象转为字节码,存储到文件中,然后将文件存储到硬盘中,实现数据...

  • Android 数据存储

    一、文件存储 1.将数据存储到文件中 Android中的文件存储机制是一种基本的存储数据的方式,其不对数据进行任何...

  • i-node节点与链接

    文件系统 文件系统存储文件属性、文件内容和目录。这些内容是怎样在文件系统中存储的呢?Linux将磁盘块分成了3部分...

网友评论

      本文标题:string的内容存储到文件中

      本文链接:https://www.haomeiwen.com/subject/kvyugxtx.html