gpt4 book ai didi

c++ - 从 .txt 文件中获取混合数值

转载 作者:行者123 更新时间:2023-11-28 06:51:03 25 4
gpt4 key购买 nike

我正在尝试为一个类创建一个程序,该类可以将整数格式、整数/denom 或 num/denom 格式的数字读入矩阵。文件的格式始终是第一行的行和列作为前两个值。之后文件可以有不同类型的数字,例如,这是我当前的 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 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

而且这种格式不会有歧义。您只需遍历数字流并逐行填充矩阵。

关于c++ - 从 .txt 文件中获取混合数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23964701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com