如何在 c++ 中从字符串向量设置类对象
How to set class objects from vector of string in c++
这些是我的登录.csv文件中的数据:
ID,姓名,密码,性别
1,利亚姆,1234,M
2,珍妮丝,0000,F
因此,我可能会使用类和对象来创建登录详细信息,并将其写入文件中。之后,我将文件中的csv拆分为字符串向量,从那里如何将详细信息加载回类的对象。
这是我从文件中拆分csv的代码:
int _tmain(int argc, _TCHAR* argv[])
{
string line;
ifstream fin("users.csv");
while (getline(fin, line)){
vector<string> token;
split(line, ',', token);
for (int i = 0; i < token.size(); i++){
cout << token[i] << " ";
//////////// <<here>>
}
cout << endl;
}
system("pause");
return 0;
}
void split(const string& s, char c, vector<string>& v) {
string::size_type i = 0;
string::size_type j = s.find(c);
while (j != string::npos) {
v.push_back(s.substr(i, j - i));
i = ++j;
j = s.find(c, j);
if (j == string::npos)
v.push_back(s.substr(i, s.length()));
}
}
我在想如何将拆分的字符串从字符串向量设置为对象向量,如下所示:(在此处放入<<>>我在上面评论的部分)
vector<Login>loginVector;
//all the objects below should set from string vector (token)
loginVector[i].setID(); //i=0, id=1, name=Liam, password=1234, gender=M
loginVector[i].setName();
loginVector[i].setPassword();
loginVector[i].setGender();
loginVector[i].setID(); //i=1, id=2, name=Janice, password=0000, gender=M
loginVector[i].setName();
loginVector[i].setPassword();
loginVector[i].setGender();
谢谢。
实现您的Login
对象并将其填充到循环中。
struct Login {
enum Gender {
Male,
Female
};
int Id;
std::string Name;
std::string Password;
/* you should probably use a constructor */
};
/* to construct your vector */
int I = 0;
while(I < token.size()) {
/* in your iterator */
Login& LO = loginVector.emplace_back(Login{});
LO.Id = std::stoi(token[++I]);
LO.Name = token[++I];
/* etc...*/
}
请注意,这假设您的CSV格式正确,由您实施所有检查并确保处理极端情况,例如可能的错误stoi
,空白行或缺少列。
另外,不要做system("pause");
,你正在执行一个 shell 为你睡觉,与只使用sleep
相比,它有很大的开销,它实际上做了同样的事情,只是以更直接的方式。
我个人会通过为您的类添加一个提取运算符来实现这一点。 您必须friend
提取运算符,因为它必须在类外部定义,因为它实际上是在istream
上运行的,而不是在您的类上运行的,因此应该在您的类中定义类似的东西:
friend istream& operator>> (istream& lhs, Login& rhs);
根据变量的命名方式,提取运算符应如下所示:
istream& operator>> (istream& lhs, Login& rhs) {
char gender;
lhs >> rhs.id;
lhs.ignore(numeric_limits<streamsize>::max(), ',');
getline(lhs, rhs.name, ',');
getline(lhs, rhs.password, ',');
lhs >> ws;
lhs.get(gender);
rhs.isMale = gender == 'm' || gender == 'M';
return lhs;
}
现场示例
相关文章:
- 将特征矩阵的向量设置为0
- 将向量设置为等于 {};
- 设置负元素特征稀疏向量C++
- 如何设置一个 std::vector 与另一个,其中两个是不同类的向量?
- 空向量占用的空间是否与指向当前设置为 nullptr 的类型的指针一样多
- 如何在 c++ 中从字符串向量设置类对象
- 设置 A=B 会以某种方式弄乱 B 吗?(所有向量)C++
- 当将向量设置为一个值时,整个向量会被覆盖
- 如何使用向量设置 OpenCV3 calcHist() 的参数
- 如何设置 "discrete_distribution" c++ 的向量
- 将向量<double>设置为wxComboBox的选择值
- 当对象包含其他对象的向量时,无法设置值
- 设置::使用数字中的引号进行向量初始化
- 如何在C++中创建一个网格,这将允许我将每个索引设置为一个向量,以便以后操作该向量,然后绘制它
- 如何在设置元素中重用向量?
- 将预定但非初始化的向量设置为另一个别名
- 将旧向量设置为等于新向量
- opencv:使用旋转和平移向量设置模型位置
- 在c++中使用向量设置联合算法
- 如何在方法中为向量设置默认值