我有一个包含64x64矩阵值的文本文件,它们是复数。我想从文件中读取它们但我遇到了困难。使用C的复杂库或为复数创建新的数据类型对我来说没问题,我只需要正确读取它们。
我的意思是,是否使用:
#include <complex.h>
int complex matrix[64][64];
或为其创建数据类型:
typedef struct {
int real, imag;
} Complex;
Complex matrix[64][64];
只要阅读正确,对我来说没问题。
下面你可以找到2x3矩阵,只是为了演示我的文件中的数字:
{{-32767, 12532 + 5341I, -3415 - 51331I}
{32767I, 32609 + 3211I, 32137 + 6392I}}
因为你可以看到一些部分同时具有实部和虚部,有些只是虚部而有些只是实部,而所有虚数都在末尾有大写'i'字母。如果你可以帮助我,我会很高兴。
答案 0 :(得分:0)
数字的组织方式无关紧要,如果它们在记忆中对齐,你可以一次阅读它们:
Complex matrix[64][64];
fread(matrix,sizeof(Complex),64*64, your_file_pointer);
写作相同:
fwrite(matrix, sizeof(Complex), 64*64, your_file_pointer);
答案 1 :(得分:0)
两种常见的设计模式适用:
1)接受“语言”的Recursive descent parser
2)State Machine
这两种情况都可以从read_char()函数中受益,如果遇到错误则会以错误退出 除了'{','}',0-9,i,+, - 之外的任何内容,以及跳过所有空格(ch <= 32)。
状态机可以更加通用:如果在任何时候有“+”或“ - ”,则可以添加或减去下一个值(以“i”或“i”结尾)到目前的累计价值。 (然后状态机能够计算1 + 2-1 + 1i,同时它......)