1

我已经看到使用“strcopy”和“strcat”执行此操作的方法,但我不允许使用任何预定义的字符串函数。

我得到:

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

我必须将 input1 和 input2 中的字符放入结果中(从左到右)。我是否必须使用两个 for 循环,变量 i 和 j 来表示参数列表中的两个不同字符串?我知道如何从一个字符串中复制值,但我对如何从两个字符串中传输值感到困惑。谢谢您的帮助。

所以这就是我的 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
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[i+j] = input2[j];//Copy to the location of the continued
   }
   result[i+j] = '\0';
}
于 2013-05-16T11:07:27.757 回答
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

编辑

只需更正您的第二个循环,您将追加到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 回答
0

如果您可以使用链表而不是数组作为输入字符串,您只需将字符串 1 的最后一个字符的指针设置为字符串 2 的开头即可。如果链接列表不是一种选择,那么您可以使用额外的空间来存储两个字符串,方法是使用一个循环遍历它们。

于 2013-05-16T05:36:45.697 回答