用C ++计算TXT中的列数?

时间:2018-05-26 12:03:33

标签: c++ c++11

我在txt文件中有这些类型的数据。

1   3   4   5
2   4   5   2
3   5   7   8
2   5   7   8

甚至

1 3 4 5
2 4 5 2
3 5 7 8
2 5 7 8

与TAB分隔,使用一个空格或从excel导出。 我需要一个函数来计算列,返回一个int,我该怎么做?

谢谢!

4 个答案:

答案 0 :(得分:1)

也许有一些更优雅的方式,但你可以尝试这样的事情:

ifstream file("MyFile.txt"); //open your file
string line;
getline(file, line);         //read the first line of your file to string
stringstream s;
s << line;                   //send the line to the stringstream object...

int how_many_columns = 0;    
double value;

while(s >> value) how_many_columns++;  //while there's something in the line, increase the number of columns

cout << how_many_columns;
plik.close();

如果数字由制表符或空格分隔(如果它们是混合的,或者例如有时在两个数字之间有两个空格),则它起作用。但是,如果同一行中的数字之间有逗号,则它不起作用。

答案 1 :(得分:0)

你可以一次读一行,然后拆分空格得到每行的列数,最后输出最大数。

答案 2 :(得分:0)

简短回答

不存在满足您需求的本机C ++功能。

一个简单的解决方法

假设每行包含相同数量的列,并且列不能为空,一种简单的可能性是遍历第一行的字符串并检查每个字符是否匹配' '或'\ t'然后递增一个计数器,除非前一个字符也是一个空格字符(即多个空格字符用于分隔一列)

请注意:此外还假设行中至少有一列,且该行不以分隔符结尾。

int countColumns(string row){
    int  numberOfColumns=1;
    bool previousWasSpace=false;

    for(int i=0; i<row.size(); i++){
        if(row[i] == ' ' || row[i] == '\t'){
            if(!previousWasSpace)
                numberOfColumns++;

            previousWasSpace = true;
        } else {
            previousWasSpace = false;
        }   
    }   

    return numberOfColumns;
}

实施例

<强>调用

cout << countColumns("1      2 3    4") << endl;
cout << countColumns("1  2  3  4\t\t5") << endl;

<强>返回

4
5

答案 3 :(得分:0)

这是第一次尝试。也许你想添加一些样板来处理一些特殊情况。

int read_columns(I stream& stream){
  int count(0);
  for(char ch; stream.get(ch) && ch != ‘\n’; ){
    stream.putback(ch);
    If(int tmp; stream >> tmp) ++count;
  }
  if(stream.bad() || stream.fail()){
    throw exception();
  }
  return count;
}