2016-11-14 239 views
0

我无法尝试让用户输入一个数字串矩阵并试图将它们转换为整数,以便我可以在矩阵上执行数值运算。我的代码如下。将矩阵字符串数组转换为整数矩阵? 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);),使得它使多个线路可以作为输入读取。但我的问题是我将如何提取这些行的字符串,并将它们放入一个新的数组与他们的整数形式?此外,而不是使用first_matrix[i] = matrix1[i] - '0';我应该使用stoi,但我有点困惑如何使用stoi也创建一个新的数组数组。 (我知道这将字符串转换为整数,但实际上,我怎么用它做什么?)

+0

胼使用['标准:: istringstream'(http://en.cppreference.com/w/cpp/io/basic_istringstream)做你想做的事情。 –

+0

在http://en.cppreference.com/w/cpp/string/basic_string/stol上有基本使用'stoi()'的例子。 – Peter

回答

0

您可以结合使用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<>会自动指示它们的结束(当输入完全消耗时)。
当lambda表达式的输入包含不是数字的字符时,此解决方案崩溃。你可以扩展lambda表达式来处理这些情况(如果需要的话)。
(对于拆分也看到Split a string in C++?

请添加一些大括号围绕你的while -loop :)