c - C使用递归函数返回字符
问题描述
我正在尝试创建一个获取 char 数组的函数,如果数组中的元素是字母和小写,它将元素更改为大写,反之亦然。
我调试了代码,它似乎可以工作,我唯一的问题是我不知道如何重建 char 数组,因为每次我返回一个 char 并且它假设创建一个 char 数组,据我了解。
有人可以告诉我我做错了什么吗?
char reverseLetter(char str[])
{
char temp;
if (strlen(str) == 0)
return 0;
if (str[strlen(str) - 1] >= 'A' && str[strlen(str) - 1] <= 'Z')
{
temp = tolower(str[strlen(str) - 1]);
str[strlen(str) - 1] = '\0';
return reverseLetter(str) + temp;
}
else if (str[strlen(str) - 1] >= 'a' && str[strlen(str) - 1] <= 'z')
{
temp = toupper(str[strlen(str) - 1]);
str[strlen(str) - 1] = '\0';
return reverseLetter(str) + temp;
}
else
{
str[strlen(str) - 1] = '\0';
return reverseLetter(str);
}
}
void main()
{
char str[4] = { 'a', 'b', 'C', '\0' };
printf("%c", reverseLetter(str));
}
编辑:我认为我需要返回每个字符显然这不是你想要做的,你需要更改数组中的元素并返回数组。
解决方案
您可以让用户创建一个新字符串,并将其作为参数提供给您:
char reverseLetter(char *dest, char const *source)
{
while (*source)
{
if (*source <= 'z' && *source >= 'a')
*dest = *source - 'a' + 'A';
else if (*source <= 'Z' && *source >= 'A')
*dest = *source - 'A' + 'a';
else
*dest = *source;
++dest;
++source;
}
*dest = '\0';
}
int main(void)
{
char src[] = "abC09";
char dst[6];
reverseLetter(dst, src);
printf("%s --> %s\n", src, dst);
return 0;
}
请注意,source
具有限定符const
,因此用户知道您不会修改源字符串。
如果您绝对希望它是递归的:
char reverseLetter(char *dest, char const *source)
{
if (*source <= 'z' && *source >= 'a')
*dest = *source - 'a' + 'A';
else if (*source <= 'Z' && *source >= 'A')
*dest = *source - 'A' + 'a';
else
*dest = *source;
if (*source)
reverseLetter(dest+1, source+1);
}
推荐阅读
- javascript - MediaDevice applyConstraints 不起作用
- python - crontab 每分钟而不是每两小时运行一次 python 脚本
- python - 按索引交换列表中的值
- python-3.x - 如何在 openCV tkinter 代码中解决这个问题
- r - 使用 iter 函数的语法是什么
- python - 使用正则表达式打印我拥有的每一行
- django - Django 服务器在多个请求上停止
- python - 将 .rtf 文件转换为 sting 输出 - 如何从字符串输出中删除 /par?
- reactjs - framer-motion:元素在第三次改变状态时停止动画
- batch-file - cmd批处理文件中调用函数的问题