使用二维数组制作图表

时间:2017-10-28 20:33:22

标签: c++

我试图在图表上绘制几点,但我不知道该怎么做。基本上我的目标是使用二维阵列绘制品脱。

以下是图表的外观:

     1  2  3  4  5  6  7  8  9 10
   1                              
   2                          C   
   3        F                     
   4     F  M  F                  
   5        F                     
   6                              
   7                    X         
   8                              
   9                 B  B  B      
  10                       C 

以下是图表的输入点(输入文件):

Rows    10
Cols    10

M   4,3
C   2,9
X   7,7
B   9,6
B   9,7
B   9,8
C   10,8
F   3,3
F   5,3
F   4,2
F   4,4

我尝试过使用if语句,所以如果在输入文件中遇到一个字母,它会自动将其记录到文件中。你能告诉我如何做到这一点的想法吗?我不是要求你们写下所有的代码。感谢。

2 个答案:

答案 0 :(得分:2)

  

基本上我的目标是使用二维数组绘制点。

  • 您需要做的第一件事就是从文本文件中提取数据
  • 对于每行数据,请将其拆分为:symbolxy

    e.g: 'M', 4, 3  corresponds to (symbol, x, y)
    
  • 根据提取的数据更新您的2D数组

  • matrix[x][y] = symbol;

您当然可以将xy偏移1,因为您的数组以索引0开头。

答案 1 :(得分:-1)

您可以自己解析文件数据(或者更好地制作单独的票证)。至于打印数据:

#include <iostream>
#include <vector>

class Graph
{

private:

    std::vector<char> _graph;
    size_t _rows;
    size_t _cols;
    char _ch;

public:

    Graph(size_t rows, size_t cols, char ch = '.') : _rows(rows), _cols(cols), _ch(ch) { _graph.assign((_rows + 1) * (_cols + 1), _ch); }

    bool PutChar(char c, size_t row, size_t col)
    {
        if (row > _rows || col > _cols || row == 0 || col == 0)
            return false;

        _graph[col + row * _rows] = c;
        return true;
    }

    char GetChar(size_t row, size_t col)
    {
        if (row > _rows || col > _cols || row == 0 || col == 0)
            return _ch;

        return _graph[col + row * _rows];
    }

    void PrintGraph()
    {
        printf("%3c", 0x20);

        for (size_t col = 1; col <= _cols; ++col)
            printf("%3zu", col);

        printf("\n");

        for (size_t row = 1; row <= _rows; ++row)
        {
            printf("%3zu", row);

            for (size_t col = 1; col <= _cols; ++col)
            {
                printf("%3c", GetChar(row, col));
            }

            printf("\n");
        }
    }
};

int main()
{

    Graph graph(10, 10);

    graph.PutChar('M', 4, 3);
    graph.PutChar('C', 2, 9);
    graph.PutChar('X', 7, 7);
    graph.PutChar('B', 9, 6);
    graph.PutChar('B', 9, 7);
    graph.PutChar('B', 9, 8);
    graph.PutChar('C', 10, 8);
    graph.PutChar('F', 3, 3);
    graph.PutChar('F', 5, 3);
    graph.PutChar('F', 4, 2);
    graph.PutChar('F', 4, 4);

    graph.PrintGraph();

    return 0;
}

打印:

enter image description here

我在你的任务中发现奇怪的是,X是Y而Y是X,并且都以1开头。这使得它很尴尬,不知道为什么它需要像这样。

编辑:刚才意识到上面并没有按要求使用2d数组,而是模仿它。