将矩阵字符串数组转换为整数矩阵? C++
Convert matrix string array to integer matrix? C++
我在尝试让用户输入数字字符串矩阵并将其转换为整数以便对矩阵执行数值运算时遇到问题。我的代码如下。
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
与 std::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 表达式调用每个输入(每个数字都带有白色 space(s))std::stoi
函数。
第二个参数为空,因为 std::istream_iterator<>
自动指示它们的结束(当输入完全消耗时)。
当 lambda 表达式的输入包含不是数字的字符时,此解决方案会崩溃。您可以扩展 lambda 表达式来处理这些情况(如果需要)。
(有关拆分,另请参阅 Split a string in C++?)
请在 while
-loop 的语料库周围添加一些大括号 :)
我在尝试让用户输入数字字符串矩阵并将其转换为整数以便对矩阵执行数值运算时遇到问题。我的代码如下。
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
与 std::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 表达式调用每个输入(每个数字都带有白色 space(s))std::stoi
函数。
第二个参数为空,因为 std::istream_iterator<>
自动指示它们的结束(当输入完全消耗时)。
当 lambda 表达式的输入包含不是数字的字符时,此解决方案会崩溃。您可以扩展 lambda 表达式来处理这些情况(如果需要)。
(有关拆分,另请参阅 Split a string in C++?)
请在 while
-loop 的语料库周围添加一些大括号 :)