c++文件读入到string问题

把文件中的数据读到程序中时,所有数据全存到string中了,也就是说它读取的时候不会断,把原本属于其他的数据成员全读到string中了,请问怎么处理才能正确读入呢?

你到底什么语言?java还是c++?
可以用 strstr (c/c++)或者 split(java)分割下
C/C++还有sstream和sscanf 可以用

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7540941
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:string.h 头文件中包含的一些库函数
  • 除此之外, 这篇博客: 模拟实现C++中string类的常用方法中的 2.含有增删查改的string模拟实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里我们除了实现基本的构造,拷贝,复制,析构,等意外,我们还希望实现常用的增删查改等功能;
    实现的常用的成员函数有:

    void push_back(char ch); //尾插
    void append(const char* str); //追加
    void reserve(size_t n); //扩容为大小n
    void resize(size_t n, char ch = '\0'); //扩容并初始化
    string& insert(size_t n, char ch); //在n位置插入字符
    string& insert(size_t n, const char* s);//
    string& erase(size_t pos = 0, size_t len = npos);//删除长度为len的字符
    void clear();//清理资源
    size_t find(const char* str, size_t pos = 0);//查找str,从pos位置开始
    size_t find(char ch);//查找字符 ch
    const char* c_str() const;//获得字符串
    size_t size() const;//实际容量大小,不包含字符串
    //迭代器
    const_iterator begin() const;//
    iterator begin();//
    iterator end();//
    const_iterator end() const;//
    //运算符重载
    string& operator+=(const char* str);//
    string& operator+=(char ch);//
    bool operator<(const string& s1, const string& s2);
    bool operator==(const string& s1, const string& s2);
    bool operator<=(const string& s1, const string& s2);
    bool operator>(const string& s1, const string& s2);
    bool operator>=(const string& s1, const string& s2);
    bool operator!=(const string& s1, const string& s2);
    ostream& operator<<(ostream& out, const string& s2);
    istream& operator>>(istream& in,  string& s2);
    
  • 以下回答由chatgpt基于相关博客总结生成:

    要在C++中把文件中的数据正确地读入到程序中的各个数据成员中,建议采用以下步骤:

    1. 定义一个存放数据的结构体或类,包含需要读入的数据成员。

    2. 打开文件,可以使用ifstream类,打开要读的文件,如:ifstream ifs("file.txt");

    3. 定义一个用于读入数据的变量,可以使用string类型。

    4. 读入文件中的每一行数据,然后用stringstream将其分割成需要的各个部分,最后将其赋值给对应的数据成员。

    5. 关闭文件。

    下面是一个代码示例:

    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>
    
    using namespace std;
    
    struct Person {
        string name;
        int age;
        double height;
    };
    
    int main() {
        ifstream ifs("person.txt"); // 打开文件
        if (!ifs.is_open()) {
            cout << "文件打开失败!" << endl;
            return 1;
        }
    
        string line;
        while (getline(ifs, line)) { // 读取文件中的每一行
            istringstream iss(line); // 将行字符串转为stringstream
            string name;
            int age;
            double height;
            iss >> name >> age >> height; // 将各个部分赋值给对应的变量
            Person p = {name, age, height}; // 构造结构体
            // 对p进行进一步处理或保存
        }
    
        ifs.close(); // 关闭文件
    
        return 0;
    }
    

    在上面的代码中,我们定义了一个名为Person的结构体,包含三个数据成员:name、age和height。通过打开文件并读取每一行,我们将每一行内容按照分隔符(默认是空格符)分割,并赋值给对应的变量,最后构造得到了一个Person结构体。我们可以对这个结构体进行进一步的处理或者保存。注意,在使用istringstream时,需要按照文件内容的格式读入数据,否则会发生读入错误。同时,在实现中我们还需要注意文件打开失败的情况和内存泄漏问题。