在c中写一个Alternate_Case函数?

时间:2017-03-27 23:06:39

标签: c

我写了这个函数,尽管它不起作用:

char *alternateCase (char *string)
{
  while (*string)
  {
    if (islower(*string)) *string = toupper(*string); 
    else if (isupper(*string)) *string = tolower(*string); 
    string++;
  }
  return string; 
}

所以,我试着添加一个指向字符串变量的指针并且它有效,第二个函数如下:

char *alternateCase (char *string)
{
  char *ptr= string;
  while (*ptr)
  {
    if (islower(*ptr)) *ptr = toupper(*ptr); 
    else if (isupper(*ptr)) *ptr = tolower(*ptr); 
    ptr++;
  }
  return string; 
}

我不完全理解为什么第一个功能不起作用,而第二个功能起作用。在我看来,他们是相同的! 为什么第二个是正确的,第一个是错的?

2 个答案:

答案 0 :(得分:3)

您需要将指针保存到字符串的开头。在第一个示例中,您将更改作为函数参数接收的指针。因此,您需要保留原始指针并使用临时指针*ptr,如第二个示例所示。

或者,您可以使用第一个示例,但应该保存字符串长度

int length = strlen(string);

然后

return (char*)(string - length);

答案 1 :(得分:1)

第一个发布的示例代码不起作用的原因是因为这两行。

string++;
and 
return string;

当while循环退出时,指针string指向终止输入参数字符串的NUL字节。

返回该修改的指针会导致调用者接收指向NUL字节的指针。不是我们需要的。