1

「strcopy」と「strcat」でこれを行う方法を見てきましたが、定義済みの文字列関数を使用することは許可されていません。

私は与えられています:

    void str_cat_101(char const input1[], char const input2[], char result[]);

そして、input1 と input2 の文字を (左から右に) 結果に入れる必要があります。引数リスト内の 2 つの異なる文字列を表す変数 i と j を使用して、2 つの for ループを使用する必要がありますか? 1 つの文字列から値をコピーする方法は知っていますが、2 つの文字列から値を転送する方法については混乱しています。助けてくれてありがとう。

これが私のstring.cファイルにあるものですが、正しい方法ではなかったように感じます。

void str_cat_101(char const input1[], char const input2[], char result[])
{
   int i, j;
   for (i = 0; input1[i] != '\0'; i++)
   {
      result[i] = input1[i];
   }
   result[i] = '\0';
   for (j = 0; input2[j] != '\0'; j++)
   {
      result[j] = input2[j];
   }
   result[j] = '\0';
}

そして、ここに私のテストケースがあります:

void str_cat_101_tests(void)
{
   char input1[4] = {'k', 'a', 'r', '\0'};
   char input2[3] = {'e', 'n', '\0'};
   char result[7];

   str_cat_101(input1, input2, result);
   checkit_string("karen", result);
}

int main()
{
   str_cat_101_tests();

   return 0;
}
4

3 に答える 3

0

入力文字列に配列の代わりに連結リストを使用できる場合は、文字列 1 の最後の文字のポインターを文字列 2 の先頭に設定するだけで完了です。リンクされたリストがオプションでない場合は、余分なスペースを使用して、1 つのループを使用して両方の文字列をトラバースすることにより、両方の文字列を格納できます。

于 2013-05-16T05:36:45.697 に答える
0

次のようにできます(コメントを読む):

void str_cat_101(char const input1[], char const input2[], char result[]){
  int i=0, j=0;
  while(input1[j]) // copy input1
    result[i++] = input1[j++];
  --i;
  j=0;
  while(input2[j]) // append intput2
    result[i++] = input2[j++];           
  result[i]='\0';
}

result[]十分に大きくなければなりませんstrlen(input1) + strlen(input2) + 1

編集

2 番目のループを修正するだけresult[]で、結果としてゼロの場所から再コピーする代わりに追加することになります。

   for (j = 0; input2[j] != '\0'; j++, i++) // notice i++
   {
      result[i] = input2[j];   // notice `i` in index with result 
   } 
   result[i] = '\0';  // notice `i`
于 2013-05-16T05:33:49.650 に答える