C语言根据数字创建矩阵

基本原理

书接上文用C语言实现一个矩阵,
最直接的方案就是通过数字、空格和逗号,例如

1 2 3,4 5 6, 7 8 9

即可用来代表

[ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1&2&3\\4&5&6\\7&8&9 \end{bmatrix} 147258369

考虑到在矩阵运算时可能会产生的歧义,即

1 2, 3 4 + 5

这代码无法解释,故为其加上一层括号,用[a b, c d]来创建数值矩阵。

简单起见,第一版程序要求矩阵必须通过数值来创建,从而避免了递归的麻烦。

具体实现

Matrix* NumMatrix(char *str){
    int row = 0;
    int nCols[MAXLEN];
    nCols[0] = 1;
    double* data = (double*)malloc(sizeof(double)*MAXLEN);
    int i = 0;
    if(str[i++]!='[')
        return NULL;
    int start = i;
    int j = 0;      //data的iter
    char* temp = (char*)malloc(sizeof(char)*MAXLEN);
    while(str[i]!=']'){
        temp[i-start] = str[i];
        if(str[i]==',' || str[i]==' '){
            if(str[i]==','){
                row += 1;
                nCols[row] = 1;
            }
            else
                nCols[row]+=1;
            temp[i-start] = '\0';
            data[j++] = atof(temp);
            start = i+1;
        }
        i++;
    }
    temp[i-start]='\0';
    data[j] = atof(temp);
    for(i = 1; i < row; i++){
        if(nCols[i-1]!=nCols[i]){
            return NULL;

        }
    }
    row++;
    int col = nCols[0];
    Matrix* mat = SetBase(mat);
    for (i = 0; i < mat->size; i++){
        mat->data[i] = data[i];
    }
    return mat;
}

main函数写为

int main(){
    char str[MAXLEN];
    Matrix* mat;
    while (1)
    {
        printf("please input Numbers:");
        gets(str);
        mat = NumMatrix(str);
        printMat(mat);
    }
}

测试如下:

please input Numbers:[1 2,3 4,5 6] 
mat:2x3=6
1.000000,2.000000,
3.000000,4.000000,
5.000000,6.000000,
please input Numbers:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值