把文件中的数据读到程序中时,所有数据全存到string中了,也就是说它读取的时候不会断,把原本属于其他的数据成员全读到string中了,请问怎么处理才能正确读入呢?
你到底什么语言?java还是c++?
可以用 strstr (c/c++)或者 split(java)分割下
C/C++还有sstream和sscanf 可以用
在这里我们除了实现基本的构造,拷贝,复制,析构,等意外,我们还希望实现常用的增删查改等功能;
实现的常用的成员函数有:
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);
要在C++中把文件中的数据正确地读入到程序中的各个数据成员中,建议采用以下步骤:
定义一个存放数据的结构体或类,包含需要读入的数据成员。
打开文件,可以使用ifstream类,打开要读的文件,如:ifstream ifs("file.txt");
定义一个用于读入数据的变量,可以使用string类型。
读入文件中的每一行数据,然后用stringstream将其分割成需要的各个部分,最后将其赋值给对应的数据成员。
关闭文件。
下面是一个代码示例:
#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时,需要按照文件内容的格式读入数据,否则会发生读入错误。同时,在实现中我们还需要注意文件打开失败的情况和内存泄漏问题。