2017-10-26 20 views
0

ランダムに生成されたcharの2Dベクトルをintに変換しようとしています。たとえば、文字が 'abc'の場合、intベクトルが'97,98,99 'などになるようにします。(C++)2DベクトルChar to Int

私はここで調べようとしましたが、ほとんどの場合、文字列をcharなどに変換する。

これはこれまでの説明です。

#include <vector> 
#include <cstdlib> 
#include <string> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    vector<vector<char> > vec(100, vector<char>(10)); 
    vector<vector<int> > intVec(100, vector<int>(10)); 
    srand(time(NULL)); 
    int intAscii = 0; 

    // Fill 2D vector with random chars 
    for(int i = 0; i < 1; i++) 
    { 
     rand_num = (rand() % 8 + 3); 
     for(int j = 0; j < rand_num; j++) 
     { 
      //logic here... randomly gen a char and place it in the same position, but this time in the int vector as an int. 
      vec.at(i).push_back((rand() % 26 + 97)); 
      intAscii = int(vec.at(i).at(j)); 
      intVec.at(i).push_back(intAscii);   
    } 


    // Print Contents & print out the int vector. 
    for(int i = 0; i < vec.size(); i++) 
    { 
     for(int j = 0; j < vec.at(i).size(); j++) 
     { 
      cout << vec.at(i).at(j); 
      cout << intVec.at(i).at(j); 
     } 
    } 
} 

私はに実行しています問題は、それが両方のベクトルを出力したときにint型のために、私はゼロの全体の束を取得しています、文字は、罰金であるということです。 int(vec.at(i).at(j))が機能します。つまり、charベクトルがaの場合、intベクトルは97となります。この時点で

、私の推測では、int型のベクトルの構文が間違っているかもしれないということです...

は助けてくれてありがとう!

+0

なぜ100個のサイズのベクターがあり、まだpush_back()を使用していますか? –

+0

私はあなたの例で何をしようとしているのか分かりませんが、間違った方向に進むように感じています。空のベクトルから始め、それに物を追加します。 2つのベクトルは必要ありません。文字を非常に簡単に整数として出力できます。 'a'を使用している場合は、魔法の数字を使用しないでください。 https://ideone.com/Jg3yLQ –

+0

@RetiredNinja申し訳ありませんが、私はより明確にすべきでした。そのサイズのchar配列があるのは、3〜10の列サイズから100ワードの2次元配列を生成する必要があるからです。 – h7779

答えて

0

あなたはこれを試すことがあります。

intAscii = (int)vec.at(i).at(j); 

また、要素にアクセスするために、次のように、代わりに一backのインデックスを使用する方が考えられます。

intVec.at(i).at(j) = intAscii; 

すでに割り当てので、これは動作するはずです非常に最初のあなたのベクトルのためのメモリ。