我在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,我该怎么做?
谢谢!
答案 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;
}