我试图在图表上绘制几点,但我不知道该怎么做。基本上我的目标是使用二维阵列绘制品脱。
以下是图表的外观:
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语句,所以如果在输入文件中遇到一个字母,它会自动将其记录到文件中。你能告诉我如何做到这一点的想法吗?我不是要求你们写下所有的代码。感谢。
答案 0 :(得分:2)
基本上我的目标是使用二维数组绘制点。
对于每行数据,请将其拆分为:symbol
,x
,y
e.g: 'M', 4, 3 corresponds to (symbol, x, y)
根据提取的数据更新您的2D数组
matrix[x][y] = symbol;
您当然可以将x
和y
偏移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;
}
打印:
我在你的任务中发现奇怪的是,X是Y而Y是X,并且都以1开头。这使得它很尴尬,不知道为什么它需要像这样。
编辑:刚才意识到上面并没有按要求使用2d数组,而是模仿它。