2016-11-14 22 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; 

私はgetl​​ineの(while(line!="") getline(cin, line);のようなもの)のために、whileループを書くことを知っているが、それを作ります。しかし、私の質問はです。これらの文字列をどのように抽出して整数型の新しい配列に入れるのですか?また、first_matrix[i] = matrix1[i] - '0';を使用するのではなく、私はstoiを使用するはずですが、新しい配列の配列を作成する際にstoiを使用する方法について少し混乱します。 (私はそれが整数に文字列を変換知っているが、どのように私は実際にそれを行うためにそれを使うのですか?)

+0

を追加してください。/w/cpp/io/basic_istringstream)あなたが望むことをします。 –

+0

http://en.cppreference.com/w/cpp/string/basic_string/stolに 'stoi()'の基本的な使用例があります。 – Peter

答えて

0

あなたがstd::transformとラムダ式と組み合わせてstd::istringstreamを利用することができます:

//... 
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); } 
); 

ラムダ式の呼び出し各入力(白いスペースを伴う各数字)のために、std::stoi機能。 std::istream_iterator<>が自動的に終了を示す(入力が完全に消費されたとき)ので、2番目の引数は空です。
ラムダexpresionの入力に数字ではない文字が含まれている場合、このソリューションはクラッシュします。これらのケースを処理するラムダ式を拡張することができます(必要な場合)。
(分割についてもSplit a string in C++?参照)

[ `のstd :: istringstream`](http://en.cppreference.com使用してwhile - ループのコーパスの周りにいくつかの波括弧:)

関連する問題