簡體   English   中英

從.txt文件獲取混合數值

[英]Getting mixed number values from a .txt file

我正在嘗試為一個類創建一個程序,該程序可以將整數,整數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 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

而且這種格式不會有歧義。 您只需遍歷數字流,然后逐行填寫矩陣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM