【问题标题】:Assignment, about 2d arrays赋值,关于二维数组
【发布时间】:2017-04-06 21:11:50
【问题描述】:

我需要一些帮助来解决问题。

我有这个文本文件:

我将文本的内容输入到字符串二维数组中,并将其转换为整数二维数组。当我转换为 int 数组时,nan 被替换为零。我现在开始找到二维数组中每一行的最大值和最小值,并找到两者的平均值,我成功地做到了。我的问题是我想为每行找到的平均值分配为零。我尝试使用两个 for 循环,但它用第一行的平均值替换了所有零。谁能帮帮我。

我的代码:

int min = 200;

int main() {

    fstream imagefile;
    imagefile.open("Text.txt");

    if (imagefile.fail()) { // checking for errors in file
        cerr << "Error opening file" << endl;
        exit(1);

    std::string data[3][11];
    int integer[3][11];
    for (int k = 0; k < 3; k++) {

        for (int i = 0; i < 11; i++) {
            imagefile >> data[k][i]; // read from file

        }
    }

    cin.get();

    for (int k = 0; k < 3; k++) {

        for (int i = 0; i < 11; i++)
        {
            integer[k][i] = atoi(data[k][i].c_str()); // converts string to int 
        }
    }
    cin.get();

    for (int k = 0; k < 3; k++) { //k is the row  and i is the column

        for (int i = 0; i < 11; i++) {
            cout << integer[k][i] << "  ";

        }
        cout << endl;
    }

    int row, col;
    for (row = 0; row < 3; row++) { //k is the row  and i is the column

        max = integer[row][0];
        min = integer[row][0];

        for (col = 0; col < 11; col++) {
            if (integer[row][col] > max) { max = integer[row][col]; }
            if ((integer[row][col] < min) && (integer[row][col] != 0)) { min = integer[row][col]; }
            //if (integer[row][col] == 0) { avg == integer[row][col]; }

            sum = max + min;
            avg = sum / 2;
        }
            for (int k = 0; k < integer[k][i]; k++) {  //k is the row  and i is the column
                for (int i = 0; i < 11; i++) {
                    if (integer[k][i] == 0) {

                        integer[k][i] = avg;

                    }
                    cout << integer[k][i] << "  ";

                }
                cout << endl;
            }

        cout << max << " ";
        cout << min << " ";
        cout << avg << " " << endl;
    }

    imagefile.close();
    system("pause");
    return 0;
}

【问题讨论】:

  • 您的最后一行似乎有两个 0,您想为它们分配平均值还是只为其中一个分配平均值?
  • 除0外的最小值对吗?
  • 好的!我对代码进行了注释,希望能帮助你理解。

标签: c


【解决方案1】:

您提供的代码存在多个问题。这一行:

    imagefile >> data[k][i];

错误 C2679:二进制“>>”:未找到采用“std::string”类型右侧操作数的运算符(或没有可接受的转换)

和:

    for (int k = 0; k < integer[k][i]; k++) 

错误 C2065:“i”:未声明的标识符 (78)

尝试发布实际代码。

【讨论】:

    【解决方案2】:

    如果您拥有此文件,您的代码将完美运行。

    注意:您的 Text.txt 应该正是这种格式。不是空行。

    #include<iostream>
    #include<fstream>
    #include<string>
    using namespace std;
    int main()
    {
        ifstream in("Text.txt");
        char ch = '\0'; int count = 1; //Ac counter to count number of rows
        while (!in.eof())
        {
            in.get(ch);
            if (ch == '\n') //counting lines
                count++;
        }
        in.close();
        double *avgArray = new double[count]; //array to store avg of min/max of every row
        int arraySize = count;
        in.open("Text.txt");
        count = 0;
        string strTemp = "";
        int temp = 0; //temp to get int values
        int sum = 0; //calculate sum of avery row
        int i = 0; //index number
        int max = 0;
        int min = 99999;
        while (!in.eof())
        {
            in >> strTemp;
            if (strTemp == "NaN")
                temp = 0;
            else
                temp = atoi(strTemp.c_str());
            if (temp > max)
                max = temp;
            if (temp < min && temp!=0)
                min = temp;
            in.get(ch);
            if (ch == '\n' || in.eof()) //if new line occured 
            {
                avgArray[i] = double(max + min) / 2.0; //store avg in abg array
                max = 0;
                min = 99999;
                i++; //counter of avg array
            }
        }
        in.close();
        //for (int i = 0; i < arraySize; i++) //printing
            //cout << avgArray[i]<<endl; //avg of all rows
        in.open("Text.txt");
        i = 0;
        int col = 0; //counter for cols
        int SizeCol = 0;
        temp = 0;
        strTemp = "";
        double **DataArray = new double*[arraySize]; //2D array to store file data
        while (!in.eof())
        {
            in >> strTemp;
            if (strTemp == "NaN")
                temp = 0;
            else
                temp = atoi(strTemp.c_str());
            in.get(ch);
            col++; //counting columns
            if (ch == '\n')
            {
                DataArray[i] = new double[col]; //making dynmically cols
                i++;
                SizeCol = col;
                col = 0;
            }
            if (in.eof())
                DataArray[i] = new double[col]; //for last line of file
        }
        in.close();
        in.open("Text.txt");
    
        for (int i = 0; i < arraySize; i++)
        {
            for (int j = 0; j < SizeCol; j++)
            {
                in >> strTemp;
                if (strTemp == "NaN")
                    temp = 0;
                else
                    temp = atoi(strTemp.c_str());
                DataArray[i][j]=temp;
                if (DataArray[i][j] == 0)
                    DataArray[i][j] = avgArray[i]; //Assigning avg of row at row's 0 place
            }
        }
        in.close();
    
        //Printing the final array
        for (int i = 0; i < arraySize; i++)
        {
            for (int j = 0; j < SizeCol; j++)
            {
                cout<< DataArray[i][j]<<" "; //printing
            }
            cout << endl;
        }
        cout << endl << endl;
        ofstream out("Text.txt");
        //Wrting the final array into Text.txt
        for (int i = 0; i < arraySize; i++)
        {
            for (int j = 0; j < SizeCol; j++)
            {
                out << DataArray[i][j] << " "; //Writing
            }
            out << endl;
        }
        delete[] avgArray;
        for (int i = 0; i < arraySize; i++)
            delete DataArray[i];
        delete[] DataArray;
        system("pause");
        return 0;
    }
    

    【讨论】:

    • 我不懂matlab,请在matlab选项卡中提问。
    • 另一件事是什么? @guestuser
    • 在它之前分配nan号码?那么如何分配 NaN 呢? @guestuser
    猜你喜欢
    • 2017-01-29
    • 2019-07-18
    • 1970-01-01
    • 2015-06-16
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多