Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c语言中编写一个备用的_Case函数?_C - Fatal编程技术网

在c语言中编写一个备用的_Case函数?

在c语言中编写一个备用的_Case函数?,c,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)
{
  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; 
}
我不完全理解为什么第一个函数不起作用,而第二个函数起作用。在我看来,他们是一模一样的!
为什么第二个是对的,而第一个是错的?

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

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

int length = strlen(string);
然后

return (char*)(string - length);

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

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

int length = strlen(string);
然后

return (char*)(string - length);

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

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


返回修改后的指针会导致调用者收到指向NUL字节的指针。不是需要的。

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

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


返回修改后的指针会导致调用者收到指向NUL字节的指针。不是需要的。第二个函数返回一个指向字符串开头的指针,但第一个函数返回一个指向字符串结尾的指针(因为您在第一个函数中更改了
string
)。谢谢,这很有效,我尝试在while循环
while(n--){string--;}
中n是
strlen(string)
及其作用。提示:尝试使用
for()
循环,而不是
while()
。循环中的尾随
字符串++;
可能是错误源(请考虑:中断/继续)是的,谢谢,我只是想在不使用任何索引变量的情况下编写函数。第二个函数返回指向字符串开头的指针,但第一个函数返回指向字符串结尾的指针(因为您在第一个函数中更改了
string
)。谢谢,这是有效的,我尝试在while循环
while(n--){string-->
之后添加它,其中n是
strlen(string)
并且它是有效的。提示:尝试使用
for()
循环,而不是
while()
。循环中的尾部
string++
可能是错误的来源(请思考:break/continue)是的,我只是想在不使用任何索引变量的情况下编写函数,谢谢。它应该是
return(char*)(字符串长度)
@MuhammadEbeid.是的,对不起。你的while循环有点奇怪,所以让人困惑。这是一种不好的做法吗?它有多奇怪?@MuhammadEbeid.不,这不是一种不好的做法,但我只是经常使用
来解决类似这样的问题。但是你可以使用任何方法和你想要的任何循环。我也经常使用
来解决
循环,但是我试图不使用任何索引变量。它应该是
return(char*)(字符串长度)
@MuhammadEbeid.是的,对不起。你的while循环有点奇怪,所以让人困惑。这是一种不好的做法吗?它有多奇怪?@MuhammadEbeid.不,这不是一种不好的做法,但我只是经常使用
来解决类似这样的问题。但是你可以使用任何方法和你想要的任何循环。我也经常使用
来解决
循环,但是我试图不使用任何索引变量。