-4

基本上我要做的就是重新制作我自己的 c-string。strlen、strcmp、strcpy 和 strcat。下面的代码在我的头文件中:

int mystrlen(const char pcString[]) //strlen function
{
   const char *pcStringEnd = pcString;

   while (*pcStringEnd != '\0')
      pcStringEnd++;

   return pcStringEnd - pcString;
}

int mystrcmp(char *s1, char *s2) // strcmp function
{
  while(*s1 == *s2)
  {
    if(*s1 == '\0' || *s2 == '\0')
      break;

    first++;
    second++;
  }

  if(*first == '\0' && *second == '\0')
    return (0);
  else
    return (-1);
}

char mystrcpy(char *s1, const char *s2) // strcpy function
{
  while(*s2)
  {
    *s1 = *s2;
    s2++;
    s1++;
  }

 *s1 = '\0';
}

char mystrcat(char *s1, const char *s2) //strcat function
{
  char *string1 = s1;
  const char *string2 = s2;
  char *catString = string1 + string2;
  return catString;
}

大多数错误是未定义的标识符,但问题是我不能不更改 main.cpp 中的内容。只能修改头文件。我会把我的 main.cpp 放在这里,但它的代码很长。

{
 char *string1 = s1;
 const char *string2 = s2;
 char *catString = string1 + string2; //There is an error here with string 2 and catring.
 return catString;
}
4

2 回答 2

4

您没有变量 first 和 second 的定义(在此处使用:)

first++;
second++;

您必须char* first = /*Whatever*/, *second = /*Whatever*/在函数的开头添加mystrcmp

但我认为你真的犯了一个错误,你想写

s1++;
s2++;

而不是上面的代码片段(以及在同一个函数中的进一步)

于 2013-07-03T21:28:15.053 回答
1

这段代码有几个问题。

mystrcmp

  1. 参数确实应该是const防止意外修改并允许传递字符串文字。
  2. 变量first未声明。
  3. 变量second未声明。

mystrcpy

  1. 如果您尝试匹配标准库中的函数,则返回类型应该是一个指针。
  2. 您需要将值保存在s1其中以便可以返回。
  3. 您缺少 return 语句。

mystrcat

  1. 如果您尝试匹配标准库中的函数,则返回类型应该是一个指针。
  2. 函数的主体是完全错误的。添加两个指针值不会按您期望的方式工作。它产生一个指针值,p1 + p2并且不会访问或修改它们指向的数据。

以下是编译作业所需的修改。除了mystrcat. 我还包括了上面列出的注释中的评论。

int mystrlen(const char *pcString) //strlen function
{
    const char *pcStringEnd = pcString;

    while (*pcStringEnd != '\0')
        pcStringEnd++;

    return pcStringEnd - pcString;
}

// added const to parameters
// changed first to s1
// changed second to s2
int mystrcmp(const char *s1, const char *s2) // strcmp function
{
    while(*s1 == *s2)
    {
        if(*s1 == '\0' || *s2 == '\0')
            break;

        s1++;
        s2++;
    }

    if(*s1 == '\0' && *s2 == '\0')
        return (0);
    else
        return (-1);
}

// changed return type to a pointer
// added variable to save start of s1
// added return statement
char* mystrcpy(char *s1, const char *s2) // strcpy function
{
    char *start = s1;

    while(*s2)
    {
        *s1 = *s2;
        s2++;
        s1++;
    }

    *s1 = '\0';

    return start;
}

// changed return type
// replaced entire function body
char *mystrcat(char *s1, const char *s2) //strcat function
{
    mystrcpy(s1 + mystrlen(s1), s2);
    return s1;
}
于 2013-07-03T21:52:17.447 回答