Sec*_*pra 2 c++ constants codeblocks visual-studio-2012
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <iterator>
#define ADDR "c:\\Users\\Library2\\Desktop\\Books record\\"
using namespace std;
int main()
{
ifstream fin(ADDR "reportcard.csv", ios::binary);
string line;
int rowCount=0;
int rowIdx=0;
while(getline(fin,line)){
rowCount++;
}
vector<string> data[**rowCount**];//this rowCount gave me "expression must have a constant value"
fin.clear();
fin.seekg(fin.beg);
while(getline(fin,line))
{
stringstream ss(line);
string value;
while(getline(ss,value,',')){
data[rowIdx].push_back(value);
}
rowIdx++;
}
fin.close();
int colNum;
string colName = "LAST PERSON";
static int it;
for(vector<string>::iterator it = data[0].begin(); it != data[0].end(); ++it)
{
if ((*it)== colName)
{
colNum = distance(data[0].begin(),it);//distance() gave me "no instances of function templates matches argument"
break;
}
}
cout << data[1][colNum] << "\t";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意:此代码用于从名为“LAST PERSON”的列下的第一个单元格中查找和获取值。使用代码块时,此代码已经可以了。但我需要使用视觉工作室。
这个
vector<string> data[rowCount];
Run Code Online (Sandbox Code Playgroud)
是一个可变长度数组的声明。
可变长度数组不是标准的 C++ 特性。一些编译器有自己的语言扩展,允许使用变长数组。其他编译器没有这样的语言扩展。
例如,您可以使用向量向量代替数组
std::vector<std::vector<std::string>> data;
Run Code Online (Sandbox Code Playgroud)
注意文件是在binaru模式下打开的
ifstream fin(ADDR "reportcard.csv", ios::binary);
Run Code Online (Sandbox Code Playgroud)
那么std::getline在一般情况下使用该函数是不正确的。
while(getline(fin,line)){
rowCount++;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |