递归处理字符串
我需要写一个递归函数这就是得到一个字符串,然后只打印字母(captial &小)从年底开始递归处理字符串
for exemple:
str={"abc123#@!456DEF&^65gHj"}
Reducing(str);
output: jHgFEDcba .
,但即时通讯停留在如何获得的部分在功能转到下一个字符 所有我能做的就是打印的最后一个字符和多数民众赞成IM卡......请帮助
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)));
}
如何使用的只是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);
}
多数民众赞成多多少少我第一次尝试,但它打印frim开始结束,我希望它做相反的,这就是为什么我尝试使用“str [strlen(str)-1]” –
@ monkey.D.Ganga更改该功能的顺序,然后 –
@ monkey.D.Ganga啊好吧,我没有注意到... –
我相信这次演习的整点下移串一个字符每递归一步,直到你结束,然后pri在返回途中返回当前字符(在递归调用之后)。你不应该使用strlen
。
字符串是由零(或NUL)字符终止的内存中的字符序列。通过在字符串中提供第一个字符的地址,您可以通过向地址添加偏移量来查找所有其他字符。一个字符串也可以被认为是一个有头的蛇(第一个字符)和一个尾巴(剩下的字符)。头是位于字符串地址的单个字符。 尾部是位于地址加上的字符串。
为了向后打印字符串,如果字符串为空(它的头部为NUL),那么我们不必做任何事情。否则,如果我们通过递归地调用向后的打印函数向后打印尾部,然后打印头部字符,那么我们完成了我们的目标。
首先,您通常使用一个字符串从中读取界面:
void reducing(const char*);
,如果你想打电话给你的字符串字面量函数(const的是这里重要的你通常需要)。
其次,c标准库在ctype
标头中提供了诸如isalpha()
之类的函数来检查char是否属于某些标准类别。
最后但并非最不重要的是,你真正想做的是看下一个字符,所以将指针向前移动一次,然后再次调用自己,直到你阅读'\0'
。
你可以做一个简单的版本,这是刚刚反转字符串是什么?然后修改它以过滤。并提示:它不应该是尾递归(嗯,它可以,但是你忽略了这一点)。 –
不要在每次迭代时尝试计算'strlen'。每次迭代只需移动一个角色,然后放松一下。 –
使用'isalpha()'会更干净,并删除幻数。 –