C++ 从输入文件c++;
所以我想从输入文件的每一行中得到一个特定的部分。 到目前为止,我得到了这个:C++ 从输入文件c++;,c++,C++,所以我想从输入文件的每一行中得到一个特定的部分。 到目前为止,我得到了这个: ifstream fin("text.txt"); string line; while (getline(fin, line)) { if (line.find("Set") == 0) { istringstream sin1(line.substr(line.find("path1=") + 1)); sin1 >> path1;
ifstream fin("text.txt");
string line;
while (getline(fin, line)) {
if (line.find("Set") == 0)
{
istringstream sin1(line.substr(line.find("path1=") + 1));
sin1 >> path1;
istringstream sin2(line.substr(line.find("path2=") + 1));
sin2 >> path2;
}
}
据我所知,(line.substr(line.find(“VAR_-CAL_-PATH2=)+1”)
部分将获取“path1=”后面的内容并将其放入path1,我想我弄错了。我的输入文件有两行:
Set path1="somepath"
Set path2="someotherpath"
当while循环结束时,我得到path1=“Set”和path2=“someotherpath”,但我需要的是path1=“somepath”和path2=“someotherpath”std::string中的find()
函数返回字符串开头的位置。添加1将指向开始+1,而不是搜索字符串后的位置
有大量关于标准库的良好文档可用,例如:
正如@Jordfräs所说,find()
返回字符串开头的位置
当您试图解析path2
值时,您将覆盖path1
的值
包含以下修复程序的代码:
const string path1field = "path1=";
const string path2field = "path2=";
string path1 = "", path2 = "";
ifstream fin("text.txt");
string line;
while (getline(fin, line))
{
if (line.find("Set") != string::npos)
{
size_t path1pos = line.find(path1field);
size_t path2pos = line.find(path2field);
if (path1pos != string::npos)
{
istringstream sin1(line.substr(path1pos + path1field.length()));
sin1 >> path1;
}
if (path2pos != string::npos)
{
istringstream sin2(line.substr(path2pos + path2field.length()));
sin2 >> path2;
}
}
}
cout << "path1: " << path1 << endl;
cout << "path2: " << path2 << endl;
常量字符串path1field=“path1=”;
常量字符串path2field=“path2=”;
字符串path1=“”,path2=“”;
ifstream fin(“text.txt”);
弦线;
while(getline(fin,line))
{
if(line.find(“Set”)!=string::npos)
{
size\u t path1pos=line.find(路径1字段);
size\u t path2pos=line.find(path2field);
if(path1pos!=string::npos)
{
istringstream sin1(line.substr(path1pos+path1field.length());
sin1>>路径1;
}
if(path2pos!=string::npos)
{
istringstream sin2(line.substr(path2pos+path2field.length());
sin2>>路径2;
}
}
}
cout字符串变量的另一个(更一般的)解决方案可以是:
ifstream fin("text.txt");
string line;
const vector<string> pathsNames={"path1=", "path2="};
vector<string> paths(pathsNames.size());
while (getline(fin, line)) {
if (line.find("Set") == 0)
{
for(std::vector<string>::size_type x=0; x<pathsNames.size(); x++){
if(line.find(pathsNames[x])!=string::npos){
paths[x]=line.substr(line.find(pathsNames[x]) + pathsNames[x].length());
break;
}
}
}
}
//print results
for(std::vector<string>::size_type x=0; x<pathsNames.size(); x++){
cout << pathsNames[x] << paths[x] << endl;
}
ifstream-fin(“text.txt”);
弦线;
常量向量路径名称={“路径1=”,“路径2=”};
向量路径(pathsNames.size());
while(getline(fin,line)){
if(line.find(“Set”)==0)
{
对于(std::vector::size_type x=0;xyou,您正在为导致问题的每一行更新路径1和路径2。