トピック4:スペースを置き換えます

////////////////////////////////////////////////// ////////////////////////////
// 6.タイトルIV:スペースを置き換える
//実現される機能を確認し、文字列の各"20%"とスペースを置き換える;例えば、次のように入力します。 - > "我々はハッピー!" "私達%20Are%20Happy!"
// O(n)との時間複雑性は、空間的な複雑さはO(1)

CHAR * StrReplace(CHAR * pszStr、int型 ILEN、チャー CH、CONST  のchar * pszReStr)
{ 
    アサート(pszStr = NULL && pszReStr = NULL && ILEN> =!0 ); 

    CHAR * PTMP = pszStr;
     INT iFindNum = 0 ; 

    // 1. CH文字列の数を検索し
    ながら、(* = PTMPを!' \ 0 ' 
    { 
        IF(PTMP ++ == * CH)
        { 
            iFindNum ++ ; 
        } 
    } 

    //2.新しい文字列の長さ
    int型 iOldLen = strlen関数(pszStr);
     int型 iReLen = strlen関数(pszReStr);
     int型 iNewLen = iOldLen +(iReLen - 1)* iFindNum; // この文字列の長さを交換する1デクリメントされる-元の文字の長さ
    であればに(iNewLen> ILEN)
    { 
        リターンNULL; 
    } 

    // バック文字列から3.割り当て
     // 私は存在しない理由= iOldLen - 1; - >コピー'\ 0'最後の; 
    のためint型 I = iOldLen。 I> = 0 && iNewLen> Iであり; i-- 
    { 
        IF(pszStr [I] == CH)
        { 
            ためINTJ = iReLen - 1J> = 0 ; j-- 
            { 
                pszStr [iNewLen - ] = pszReStr [J]。
            } 
        } 
        
        { 
            pszStr [iNewLen - ] = pszStr [I]。
        } 
    } 

の#if 0
     ながら(iOldLen> = 0 && iNewLen> iOldLen)
    { 
        場合(pszStr [iOldLen] == CH)
        { 
            ためint型 I = iReLen - 1 ; I> = 0 ; i--
            { 
                pszStr [iNewLen - ] = pszReStr [I]。
            } 
        } 
        
        { 
            pszStr [iNewLen - ] = pszStr [iOldLen]。
        } 

        iOldLen - 
    } 

#endifの

    戻りpszStrと、

} 

ボイドStrReplaceTestFunc()
{ 
    COUT << " \ n \ n --------------- StrReplaceTestFuncスタート--------------> " << ENDL ; 

    const  int型 MAX_STR_LEN = 128 ;
    チャー szStr [MAX_STR_LEN] =私たちは幸せです!

    StrReplace(szStr、MAX_STR_LEN、'  '" 20%" )。

    裁判所未満 << " 筋力:" << szStr << てendl; 

    StrReplace(szStr、MAX_STR_LEN、' '" -------> " ); 

    裁判所未満 << " 筋力:" << szStr << てendl; 

    裁判所未満 << " \ N \ N --------------- StrReplaceTestFunc終了--------------> " << てendl; 

}


////////////////////////////////////////////////// /////////////////
4つのトピックに関連するトピックについて// 2
// 2ソートされた配列A1、A2、A1の終わりA2を収容するのに十分なスペースがある、達成機能、A2、A1は、すべての数字と秩序のすべての数字を挿入します!

@ 方法:比較を前面から背面に、追加のスペースが必要とされる
 // 時間の複雑性O(2N)、Oの空間的な複雑さ(N-)
のボイド MergeTwoArray1(int型 aiArrayA []、int型 iNumA、INT aiArrayB []、int型iNumB)
{ 
    CONST  INT MAX_ARRAY_COUNT + = iNumA iNumB; 
    ベクター < INT > VECT(MAX_ARRAY_COUNT、0 ); 

    int型私は= 0 J =、0 K = 0 ; 
    
    // 2つの配列の比較1、小さい追加された新しい配列
    一方、(私は<iNumA && J < iNumB)
    { 
        IF(aiArrayA [I] < aiArrayB [J])
        {
            VECT [K ++] = aiArrayA [I ++ ]; 
        } 
        
        { 
            VECT [K ++] = aiArrayB [J ++ ]; 
        } 
    } 

    // 2の新しい配列に加え、残りの要素
    ながら(私は< iNumA)を
    { 
        VECT [ K ++] = aiArrayA [I ++ ]; 
    } 

    ながら(J < iNumB)
    { 
        VECT [K ++] = aiArrayB [J ++ ]; 
    } 

    // アレイ3. Aにデータをコピー 
    K = 0 ;
     のための(自動IT: VECT)
    { 
        aiArrayA [K ++] =IT; 
    } 
} 

// 方法2:余分なスペース、バックから比較
 // Oの時間複雑度(n)は、空間的複雑度は、O(1)
ボイド MergeTwoArray2(INT aiArrayA []、INT iNumA、INT aiArrayB []、INT iNumB)
{ 
    int型 iNewNum = iNumA iNumB + - 1。;
     int型 I = iNumA - 1。;
     INT J = iNumB - 1。; 
    
    // フォワード比較アレイから、重なりが存在しません!
    一方、(I> = 0 && J> = 0 
    { 
        IF(aiArrayA [I]> aiArrayB [J])
        { 
            AiArrayA [iNewNum - ] = aiArrayA [i-- ]。
        } 
        エルス
        { 
            aiArrayA [iNewNum - ] = aiArrayB [j-- ]。
        } 
    } 

    ながら(I> = 0 
    { 
        [iNewNum aiArrayA - ] = aiArrayA [i-- ]。
    } 

    一方(J> = 0 
    { 
        aiArrayA [iNewNum - ] = aiArrayB [j-- ]。
    } 

} 

ボイドMergeTwoArrayTestFunc()
{ 
    COUT << "\ N \ N --------------- MergeTwoArrayTestFuncスタート--------------> " << てendl;
     constの int型 MAX_ARRAY_COUNT_A = 30 ;
     のconst  int型 MAX_ARRAY_COUNT_B = 10 ; 

    int型 aiArrayA [MAX_ARRAY_COUNT_A] = { 0 ;}
     int型 aiArrayB [MAX_ARRAY_COUNT_B] = { 0 }; 

    INITIALIZE_ARRAY(aiArrayA、MAX_ARRAY_COUNT_B); 
    INITIALIZE_ARRAY(aiArrayB、MAX_ARRAY_COUNT_B); 

    STD ::ソート(aiArrayA、aiArrayA + MAX_ARRAY_COUNT_B)を、
    STD ::ソート(aiArrayB、aiArrayB + MAX_ARRAY_COUNT_B)。

    TRAVERSAL_ARRAY(aiArrayA、MAX_ARRAY_COUNT_B)。
    TRAVERSAL_ARRAY(aiArrayB、MAX_ARRAY_COUNT_B)。

    // MergeTwoArray1(aiArrayA、MAX_ARRAY_COUNT_B、aiArrayB、MAX_ARRAY_COUNT_B)。
    MergeTwoArray2(aiArrayA、MAX_ARRAY_COUNT_B、aiArrayB、MAX_ARRAY_COUNT_B)。


    TRAVERSAL_ARRAY(aiArrayA、MAX_ARRAY_COUNT_A)。

    裁判所未満 << " \ N \ N --------------- MergeTwoArrayTestFuncスタート--------------> " << てendl; 

}

おすすめ

転載: www.cnblogs.com/yzdai/p/11258605.html