2016-11-14 235 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 :)