从.txt文件中获取混合数字值

Getting mixed number values from a .txt file

本文关键字:混合 数字 获取 txt 文件      更新时间:2023-10-16

我试图为一个类创建一个程序,该程序可以在格式整,整num/dom或num/dom的数字中读取到矩阵。文件的格式始终是第一行中的row和col作为前两个值。之后,文件可以有不同类型的数字,例如,这是我当前的txt文件:

2 2 
1 1/2 2 1/4
3 1/3 4 1/5

首先使用

查找行和col
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文件,例如:

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 3
1 1/2 1 1/2

可以表示…

[(1), (1/2), (1 1/2)]

还是……

[(1 1/2), (1), (1/2)]

没有办法根据你的格式消除歧义。

必须加上零或找到其他方法来消除歧义,如使用逗号

1 3
1, 1/2, 1 1/2

基本上需要两个分隔符。

另一个替代

另一个常用的替代方法是用换行符分隔每个数字。你看,如果你要在文件中写下矩阵的每一个数字,那么你不必把它写成行。

一个类似

的矩阵
2 3
1 1/2 1 1/2
2 1/2 3 1/2

也可以表示为

2 3
1
1/2
1 1/2
2 1/2
3
1/2

这个格式不会有歧义。您只需遍历数字流并按行填充矩阵。