Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从输入文件c++;_C++ - Fatal编程技术网

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。