【发布时间】:2014-07-20 19:26:23
【问题描述】:
我正在尝试为一个类创建一个程序,该程序可以将格式整体、整个 num/denom 或 num/denom 格式的数字读入矩阵。文件的格式始终是第一行中的 row 和 col 作为前两个值。之后文件可以有不同类型的数字,例如,这是我当前的 txt 文件:
2 2
1 1/2 2 1/4
3 1/3 4 1/5
所以首先我使用以下方法找到行和列:
in >> row >> col;
并使用这个结构:
struct mixedNumber
{
int whole, num, denom;
void output();
};
我创建了一个动态数组:
mixedNumber* matrix[row];
for(int i = 0; i < row; i++)
matrix[i] = new mixedNumber[col];
现在我遇到的问题是找出输入的哪些部分是混合数的哪些部分。对于我的示例,它非常简单,现在我正在使用这个函数:
void fillMatrix(mixedNumber *matrix[], ifstream &in, int row, int col)
{
char junk;
for(int i = 0; i < row; i++)
for(int j = 0; j < col; j++)
in >> matrix[i][j].whole >> matrix[i][j].num >> junk >> matrix[i][j].denom;
}
仅当 txt 文件中的每个位置始终有三个数字时才有效。 但是一个具有不同数字类型的 txt 文件,例如:
2 3
1 1/2 2 1/2
1 1/4 2/3 3
不会被正确读取,老实说,即使看一下数字也几乎不可能分辨出来:
[(1) (1/2) (2 1/2)]
[(1 1/4) (2/3) (3)]
那么有可能做到这一点吗?或者像 [0 1/2 1 0/1] 这样的占位符零是否需要出现或在每个数字周围加上括号来说明数字的含义。
【问题讨论】:
-
输入值时,是否总是以空格分隔?如果是这样,您可能希望将它们作为字符串读入。然后您将“标记”数字,这将允许您根据“/”字符的位置拆分数字。如果没有 '/' 字符,则只有 1 个结果:如果有 1 个或更多,则得到 n+1 个结果。
-
是的,我最初的想法是使用 stringstream 将它拆开并检查它。但我认为区分(1 1/2)和(1)(1/2)之类的东西太模糊了。不过谢谢,现在我知道我应该停止尝试做一些无法完成的事情。
-
@Aloof 我为答案添加了另一种选择。尽管您可能只是想确认这种格式确实是模棱两可的。