【问题标题】:Populating 2d array from sequential file [closed]从顺序文件填充二维数组[关闭]
【发布时间】:2013-12-09 23:13:13
【问题描述】:

我正在尝试将值分配给文本文件中的二维数组,这就是我所拥有的:

string line = "";
string temp = "";

string removechr = "{} ";
string sepchar = ",";

ifstream myfile("pt.txt", ios::in);

if(myfile.is_open()){
    while( getline(myfile,line)){
        //--Remove characters
        size_t found = line.find_first_of(removechr);
        while(found != string::npos){
            line.erase(found);
        }
        //--Assign Values
        for(int y = 0; y < YCOL; ++y){
            for(int x = 0; x < XROW; ++x){
                size_t found = line.find_first_of(sepchar);
                while(found != string::npos){
                        temp.insert(line.begin(),found);
                        map[y][x]=stoi(temp);
                        temp = "";
                        line.erase(line.begin(),(line.begin() + found) - 1) ;
                }
            }
        }//End of for loop  
    }
}

首先我删除了不必要的字符({ } 和空格),然后我运行一个循环来设置数组中的值。所以现在当它找到第一个逗号时,我想将值插入到临时字符串中,这样它就可以分配给数组。毕竟我删除了刚刚分配的部分。

这就是我想做的,但我似乎没有工作,我希望有更好的方法来做到这一点。

【问题讨论】:

  • '但我似乎没有工作' 太模糊了,无法在这里提问......

标签: c++ string multidimensional-array ifstream


【解决方案1】:

看来,您的问题实际上并不是关于打开文件并处理那里的潜在错误。因此,这集中在实际循环上。不过,您并没有完全指定文件的格式,但似乎您得到的东西包含花括号和用逗号分隔的整数。目前尚不清楚每一行是否在自己的行上,或者是否可以分成多行(如果是后者;我会阅读整个文件,然后进行下面的转换并分发结果)。我假设每一行都在自己的行上:

std::string line;
for (int row(0); row != rows; ++row) {
    if (!std::getline(myfile, line)) {
        std::cout << "failed to read all rows!\n";
        return false;
    }
    // remove curlies; spaces don't matter
    line.erase(std::remove_if(line.begin(), line.end(),
                              [](char c){ return c == '{' || c == '}'; }));
    std::replace(line.begin(), line.end(), ',', ' ');
    std::istringstream in(line);
    for (int col(0); col != cols; ++col) {
        if (!(in >> map[row][col]) {
            std::cout << "failed to read all columns in row " << row << "\n";
            return false;
        }
    }
}

代码首先从行中删除垃圾,然后用空格替换逗号,因为无论如何这些都是整数的整洁分隔符,然后只读取单元格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多