0

次の関数を使用して、c で動的な 2 次元配列を生成します。

int** Make2DintArray(int arraySizeX, int arraySizeY) { // From http://pleasemakeanote.blogspot.com/2008/06/2d-arrays-in-c-using-malloc.html
    int** theArray;
    theArray = (int**) malloc(arraySizeX*sizeof(int*));
    for (int i = 0; i < arraySizeX; i++)
        theArray[i] = (int*) malloc(arraySizeY*sizeof(int));
    return theArray;
} 

マトリックス (2d - 配列) のすべての値を連結して、# で区切られた文字列を形成したかった

使った

int hi11cipherSize = 20;
std::ostringstream text2Encrypt;///ERROR SOURCE
// i used the above function to creat a 2D array and fill it 
// then i used the code below to loop through the record and create the string with delimiter #

for(int i =0; i<hi11cipherSize;i++){
    for(int j =0; j<hi11cipherSize;j++){
        printf("%d \t",HillCipherMatrix[i][j]);
        temp = HillCipherMatrix[i][j];
        text2Encrypt<<(char)temp<<"#";  //// First error cannot concatenate int with char ???

    }   printf("\n");
}

QString tempHLBP = QString::fromStdString(text2Encrypt.str()) ;

qDebug()<<"Text to encrypt "<<tempHLBP<<"\n";
qDebug()<<"Length of string "<<tempHLBP.length();

次の ERRORS ERROR が表示されます。

22:37:59: Running build steps for project StringManJVN...
22:37:59: Configuration unchanged, skipping qmake step.
22:37:59: Starting: "C:\QtSDK\QtCreator\bin\jom.exe" 
main.cpp
main.cpp(17) : error C2079: 'text2Encrypt' uses undefined class 'std::basic_ostringstream<_Elem,_Traits,_Alloc>'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Alloc=std::allocator<char>
        ]
main.cpp(27) : error C2297: '<<' : illegal, right operand has type 'const char [2]'
main.cpp(27) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
main.cpp(32) : error C2228: left of '.str' must have class/struct/union
        type is 'int'
jom: C:\QTProject\StringManJVN\Makefile.Debug [debug\main.obj] Error 2
    cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MDd -GR -EHsc -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_SQL_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\QtCore" -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\QtSql" -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\include" -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\ActiveQt" -I"debug" -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\SONUT\AppData\Local\Temp\main.obj.3948.0.jom
    C:\QtSDK\QtCreator\bin\jom.exe -f Makefile.Debug

jom 1.0.8 - empower your cores

jom: C:\QTProject\StringManJVN\Makefile [debug] Error 2
22:38:02: The process "C:\QtSDK\QtCreator\bin\jom.exe" exited with code 2.
Error while building project StringManJVN (target: Desktop)
When executing build step 'Make'

前もって感謝します ;-))

4

1 に答える 1

1

これを一番上に置いてみてください:

#include <sstream>

上記の質問を読んで、これを文字列に入れようとしていると言います。std::string を意味する場合、これを行うのは簡単です。適切な文字列ライブラリを必ず含めてください

#include <string>

そして、次のようなことができます:

int x = 4;
string s = "";
s += x + 48; //this will convert the number 4 into the char value for 4.
             //it works for all ascii numbers
s += "#";    //puts the # sign in there

それは多かれ少なかれあなたが望むものを手に入れるでしょう. それが最善の方法かどうかはわかりませんが、確かに簡単です。明らかに、上記の手順はわかりやすくするために省略されています。あなたは確かにそれを少し凝縮することができます.

于 2013-06-03T19:22:58.927 に答える