我有一个看起来像的文件:
123,Cheese,Butter
78,Milk,Vegetable,Fish
我希望使用重载运算符>>将每行读入List
数据类型int num
和char things[3][10]
。到目前为止,我有:
friend istream& operator>> (istream &is, List &rhs)
{
char comma;
is >> rhs.num >> comma >> ... (I don't know how to continue)
return is;
} // operator>>
我是否正确使用char comma
跳过逗号?如何在不使用字符串的情况下读取由逗号分隔的不同长度的不同条目?
答案 0 :(得分:1)
它只是一个伪代码,但如果你真的需要避免使用std :: string,你最好的选择就是让它或多或少看起来像这样:
istream &operator >>(istream &s, YourType &mylist) {
char mybuf[256];
s.read(mybuf, 256);
char *beg = mybuf;
char *cur = beg;
while (cur != mybuf + 256 && *cur!=0) {
if (*cur == '\n') {
mylist.addnext();
}
if (*cur == ',') {
*cur = 0; //to make the char string end on each comma
mylist.current.add(beg);
beg = cur + 1;
}
}
}
请注意,如果YourType
例如vector<vector<const char *>>
,则需要将operator >>
添加到std命名空间。