将矩阵字符串数组转换为整数矩阵? C++

Posted

技术标签:

【中文标题】将矩阵字符串数组转换为整数矩阵? C++【英文标题】:Convert matrix string array to integer matrix? C++ 【发布时间】:2016-11-14 00:46:09 【问题描述】:

我在尝试让用户输入数字字符串矩阵并尝试将它们转换为整数以便我可以对矩阵执行数字运算时遇到了麻烦。我的代码如下。

    int matrix1[10][10];

    string first_matrix;

    cout << "Enter first matrix:\n";
    while (first_matrix != " ")
        getline(cin, first_matrix);
        for(int i = 0; i < strlen(first_matrix); i++)
            if(first_matrix[i] == "")
                break;
            else(first_matrix[i] == " ")
                n = n + 2;
                if (first_matrix[i] == "\n")
                    m++;
                
                first_matrix[i] = matrix1[i] - '0';
            

    return 0;

我知道为 getline 编写一个 while 循环(类似于while(line!="") getline(cin, line);)可以将多行作为输入读取。但我的问题是如何提取这些字符串行并将它们放入具有整数形式的新数组中?此外,我应该使用 stoi,而不是使用 first_matrix[i] = matrix1[i] - '0';,但我对如何在创建新的数字数组时也使用 stoi 有点困惑。 (我知道它将字符串转换为整数,但我如何实际使用它来做到这一点?)

【问题讨论】:

使用std::istringstream 做你想做的事。 en.cppreference.com/w/cpp/string/basic_string/stol 有stoi() 的基本使用示例。 【参考方案1】:

您可以将std::istringstreamstd::transform 和lambda 表达式结合使用:

//...
getline( cin, first_matrix );
std::istringstream inputStream( first_matrix );
std::transform(
    std::istream_iterator<std::string>(inputStream),
    std::istream_iterator<std::string>(),
    matrix1[i],
    [] (std::string in) -> int  return std::stoi(in); 
);

lambda 表达式为每个输入(每个数字都带有空格)调用std::stoi 函数。 第二个参数为空,因为std::istream_iterator&lt;&gt; 自动指示它们的结束(当输入完全消耗时)。 当 lambda 表达式的输入包含不是数字的字符时,此解决方案会崩溃。您可以扩展 lambda 表达式来处理这些情况(如果需要)。 (拆分参见Split a string in C++?)

请在while-loop 的语料库周围添加一些大括号:)

【讨论】:

以上是关于将矩阵字符串数组转换为整数矩阵? C++的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 将 Eigen 稀疏矩阵转换为数组?

在 C++ 中将 matlab 矩阵转换为数组的有效方法

MATLAB将元胞数组中特定行列转换为矩阵

如何将 C++ 或 C 中的字符串转换为整数数组?

如何在 C++ 中将 OpenCV 2D 矩阵转换为 1D 数组?

Matlab怎么把元胞数组转化成矩阵