[英]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.