将字符串转换为矩阵数组

时间:2019-04-26 09:42:30

标签: c++ arrays string matrix substring

需要开发一个程序来执行Matrix运算。程序使用 定义的字符串格式来表示用户输入和输出中的矩阵 部分。对于以下矩阵: examplee:用户输入Matrix的字符串表示形式: 例如:[10 2.13 3; -5 0 4; 16.5 1 8] 在程序中,用户以定义的字符串格式输入矩阵,然后 要求输入操作员

所以我无法将此字符串转换为数组以求和或乘运算

using namespace std;

int main() { 

    int i, j, n; 
    string s1; 
    float m1[100][100]; 

    getline(cin, s1);

    for (int i = 0; i < 100; i++) { 
        for (n = 0; n < s1.length(); n++) { 
            if (isspace(s1.at(i)));
        } 
    }
}

1 个答案:

答案 0 :(得分:1)

一种解析/读取矩阵的算法,例如

  

[10 2.13 3;-5 0 4;16.5 1 8]

可能是:

  1. 索引colrow0初始化。

  2. 一个循环,该循环跳过输入字符串的字符,直到找到'['

  3. 一个循环,通过以下处理读取字符的输入字符串

    • '0''1',...,'9''+''-''.''e',{ {1}}:收集字符(它是数字的一部分。)
    • 'E':如果收集了字符,请将它们转换为' '(例如,使用float),并将结果存储在矩阵元素(strtod(),{{1 }}),然后再增加row
    • col:如果收集了字符,请将它们转换为col(例如,使用';'),并将结果存储在矩阵元素(float,{{1 }})。
      递增strtod()并将row重置为col
    • row:如果收集了字符,请将其转换为col(例如,使用0),将结果存储在矩阵元素(']'中, float
      读取完此矩阵。

    • 其他所有内容都是语法错误。

注意:

  • strtod()有第二个参数,该参数返回指向第一个不可接受字符的指针。应该检查它是否指向收集的字符的结尾。 (否则,该算法可能会接受strtod()作为row,而不会注意到col上的语法错误。

  • 上述算法还可以/还应该返回收集的行数和列数。

  • 无论何时开始新行,都应该/可以在前一行是否已满之前检查这些列。 (这不包括实际上定义了多少列的第一行。)

  • 应考虑最大可能的行数和列数以及二维。使用了C数组。