首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用c语言编写Alternate_Case函数?

用c语言编写Alternate_Case函数?
EN

Stack Overflow用户
提问于 2017-03-27 23:06:38
回答 2查看 68关注 0票数 0

我编写了这个函数,尽管它没有工作:

代码语言:javascript
复制
char *alternateCase (char *string)
{
  while (*string)
  {
    if (islower(*string)) *string = toupper(*string); 
    else if (isupper(*string)) *string = tolower(*string); 
    string++;
  }
  return string; 
}

因此,我尝试向string变量添加一个指针,它工作了,第二个函数如下所示:

代码语言:javascript
复制
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; 
}

我不完全理解为什么第一个函数不能工作,而第二个功能却起作用。在我看来,他们是一样的!为什么第二个是对的,第一个是错的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-27 23:12:28

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

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

代码语言:javascript
复制
int length = strlen(string);

然后

代码语言:javascript
复制
return (char*)(string - length);
票数 3
EN

Stack Overflow用户

发布于 2017-03-28 15:15:13

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

代码语言:javascript
复制
string++;
and 
return string;

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

返回修改后的指针,调用方将收到指向NUL字节的指针。而不是需要什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43057893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档