我需要编写一个递归函数,它会获取一个字符串,然后只打印字母(captial& small)从最后开始
for exemple:
str={"abc123#@!456DEF&^65gHj"}
Reducing(str);
output: jHgFEDcba .
但我仍然坚持如何让函数继续下一个char 我所能做的只是打印最后一个字符,这就是我卡住了......请帮忙
here's my code:
void Reducing(char str[])
{
if (str[0] == '\0')
return ;
if ((str[strlen(str)-1] <= 122 && str[strlen(str)-1] >= 97) || (str[strlen(str)-1] <= 90 && str[strlen(str)-1] >= 65))
putchar(str[strlen(str)-1]);
Reducing(str+(strlen(str)));
}
答案 0 :(得分:4)
我认为练习的重点是每个递归步骤将字符串向下移动一个字符,直到结束,然后在返回的路上打印当前字符(在递归调用之后)。您不应该使用strlen
。
字符串是内存中由零(或NUL)字符终止的字符序列。提供字符串中第一个字符的地址允许您通过向地址添加偏移量来查找所有其他字符。字符串也可以被认为是具有头部(第一个字符)和尾部(其余字符)的蛇。头是位于字符串地址的单个字符。 尾部是位于地址加1的字符串。
为了向后打印字符串,如果字符串为空(其头部为NUL),那么我们不必做任何事情。否则,如果我们通过递归调用向后打印函数向后打印尾部,然后打印头部角色,那么我们就可以实现目标。
答案 1 :(得分:1)
首先,您通常用来从中读取字符串的接口是:
void reducing(const char*);
如果你想在字符串文字(你通常想要的)上调用你的函数,那么const很重要。
其次,c标准库在ctype
标题中提供isalpha()
等函数,以检查char是否属于某些标准类别。
最后但并非最不重要的是,你真正想做的是查看下一个字符,然后将指针推进一个并再次给自己打电话,直到你读到'\0'
。
答案 2 :(得分:1)
如何仅使用str[0]
代替str[strlen(str) - 1]
并传递str + 1
进行递归:
void Reducing(char str[])
{
if (str[0] == '\0')
return ;
if ((str[0] <= 122 && str[0] >= 97) ||
(str[0] <= 90 && str[0] >= 65))
putchar(str[0]);
Reducing(str + 1);
}