我正在编写一个程序,该程序从文本文件中读取数组,该文本文件既有普通整数,也有科学计数法形式的多个数字,其形式为:#.#####E##。以下是输入 .txt 文件的一些示例行:
21 -1 0 0 501 502 0.00000000000E+00 0.00000000000E+00 0.17700026409E+03 0.17700026409E+03 0.00000000000E+00 0. -1.
21 -1 0 0 502 503 0.00000000000E+00 0.00000000000E+00 -0.45779372796E+03 0.45779372796E+03 0.00000000000E+00 0. 1.
6 1 1 2 501 0 -0.13244216743E+03 -0.16326397666E+03 -0.47746002227E+02 0.27641406353E+03 0.17300000000E+03 0. -1.
-6 1 1 2 0 503 0.13244216743E+03 0.16326397666E+03 -0.23304746164E+03 0.35837992852E+03 0.17300000000E+03 0. 1.
Run Code Online (Sandbox Code Playgroud)
这是我的程序,它只是读取文本文件并将其放入数组(或更具体地说,向量的向量)中:
vector <float> vec; //define vector for final table for histogram.
string lines;
vector<vector<float> > data; //define data "array" (vector of vectors)
ifstream infile("final.txt"); //read …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的if循环,它接受一个名为data的数组(向量向量),读取EACH行的第0个元素(即data [i] [0]元素),并输出特定于THAT的第5个元素行IFF它满足条件,即第一个元素等于整数pid(用户在代码中先前定义.)如果行不以该元素开头,我希望它不输出任何内容.
这是我的循环代码:
for(int i = 0; i < data.size(); i++) {
if(data[i][0] = pid) {
cout << data[i][5] << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行程序时,它输出每行的第5个元素,而不仅仅是以pid开头的那个元素.AKA,c ++似乎完全无视我的if语句.
有没有人对此有答案?
先感谢您!
我正在使用C++(使用CERN的ROOT框架),我对字符串有一点问题.我正在尝试使用代码中较早的用户定义的字符串来标记直方图轴.以下是代码的相关部分:
string xlabel;
...
cout << "Enter x-axis label:" << endl;
getline(cin >> ws, xlabel);
...
hist->GetXaxis()->SetTitle(xlabel);
Run Code Online (Sandbox Code Playgroud)
最后一行只是ROOT使用的语法(通常这里的xlabel将在引号中,你可以键入你想要的标签,但我试图输入前面在代码中定义的字符串.)
无论如何,当我编译它时,我收到以下错误:
error: no viable conversion from 'string'
(aka 'basic_string<char>') to 'const char *'
hist->GetXaxis()->SetTitle(xlabel);
^~~~~~
Run Code Online (Sandbox Code Playgroud)
我曾尝试将xlabel重新定义为const char*,但它也不喜欢它.有没有人对如何定义这个字符串有任何建议?
提前致谢!