2017-09-09 3 views
-1

私は単純な文字列:char *StrOne = "There is my text.";を持っています。そして、私も、2つの単純な配列を持っている:Cで2つの配列から文字列をデータに置き換えるにはどうすればよいですか?

char ArrOne[][2] = { 

    {1, 'a'}, 
    {7, 'e'}, 
    {5, 'c'}, 
    {4, 'x'}, 
    {2, 'r'} 

}; 

-

char ArrTwo[][2] = { 

    {7, 'k'}, 
    {9, 'z'}, 
    {1, 'y'}, 
    {3, 'x'}, 
    {2, 'b'} 

}; 

は私がArrTwoからの値によって、ArrOneから値をStrOneを交換したいです。私の考えがあります:

  • ステップ1 StrOneのcharは、(ArrOneに存在しているもの)がある場合は、ArrTwo内検索が添付されているものその値は、同じキー(ArrOneに存在しているもの)。
  • ステップ2.存在するすべての値を置換します(ステップ1.)。
  • ステップ3.新しい出力文字列を表示します(これは、完全に置換されます。ステップ2.)。

出力文字列は、char *StrTwo = "Thkrk is my tkxt.";です。


シンプルなC関数を作成する方法は、次のようになりますか?

+1

コードは表示されません。いくつか[MCVE](http://stackoverflow.com/help/mcve) –

+0

を表示する必要がありますあなたは間違った場所を求めています。 SOは宿題(またはプログラム作成)サービスではありません。 –

+2

し、[などのGCCを良いコンパイラとの良好な[ソースコードエディタ](https://en.wikipedia.org/wiki/Source_code_editor)(例えば、 'emacs'や' vim')を使用し、優れたCプログラミングの本を読みます](http://gcc.gnu.org/)。すべての警告とデバッグ情報でコンパイルします( 'gcc -Wall -Wextra -g')。プログラムをステップバイステップで実行するには、デバッガ( 'gdb')を使用します。ソースコードを改善する。あなたが満足するまでこれを繰り返してください。 –

答えて

0

文字が限定された範囲を持っているので、あなたは、単一の実行中に置換文字列に元の文字列から文字を変換ルックアップテーブルを構築することができます。

ArrOneと符号なしArrTwoは、次の3つのステップで変換テーブルを作成してください:

  1. メイク、
  2. 交換する必要が文字の位置に交換する必要が文字の数字キーの配列 one[]
  3. 数字キーの位置に新たな文字で
  4. メイク配列two[]は、元の文字
  5. の位置の置換文字と各文字の変換を行いますここ

がこのコードでどのように見えるかです:

今、文字列は単一のループに変換することができ
// Step 1 
unsigned char one[128] = {0}; 
for (int i = 0 ; i != 5 ; i++) { 
    one[ArrOne[i][1]] = ArrOne[i][0]; 
} 
// Step 2 
char two[128] = {0}; 
for (int i = 0 ; i != 5 ; i++) { 
    two[ArrTwo[i][0]] = ArrTwo[i][1]; 
} 
// Step 3 
char lookup[128]; 
for (int c = 0 ; c != 128 ; c++) { 
    char r = two[one[c]]; 
    lookup[c] = r ? r : c; 
} 

:あなたの質問は、以来、オフトピックですので

char str[] = "There is my text."; 
printf("%s\n", str); 
for (char *p = str ; *p ; p++) { 
    *p = lookup[(int)*p]; 
} 
printf("%s\n", str); 

Demo.

関連する問題