在不使用<string> </string>的情况下解析逗号分隔文件

时间:2015-03-05 19:20:03

标签: c++

我有一个看起来像的文件:

123,Cheese,Butter
78,Milk,Vegetable,Fish

我希望使用重载运算符&gt;&gt;将每行读入List数据类型int numchar 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跳过逗号?如何在不使用字符串的情况下读取由逗号分隔的不同长度的不同条目?

1 个答案:

答案 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命名空间。