ArLo182317 2022-03-29 15:00 采纳率: 86.7%
浏览 38
已结题

怎么实现数组的递归子函数


#include<stdio.h>
#include<string.h> 
#include<stdlib.h>
int search(char *storage){
    int len;
    len=strlen(storage);
    for(int d=0;d<len;d++){
        if(storage[d]!='P'&&storage[d]!='T'&&storage[d]!='A'){
            search(storage[d+1]);
        }else{
            return 0;
        }
    }
    return 1;
}
int main(){
    char storage[100][100];
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s",storage[i]);
}
    for(int j=i;j>=0;j--){
        search(storage[j]);
    }
    if(search){
        printf("YES\n");
    }else{
        printf("NO\n");
    }
    return 0;
}

img

  • 写回答

4条回答 默认 最新

  • CSDN专家-link 2022-03-29 15:10
    关注

    for(int j=i;j>=0;j--){
    这个有问题啊,j应该从i-1开始
    你这个递归也有问题,main里调用传入storage[j]没问题,这时候storage是二维数组,但函数里search(storage[d+1]);就不行了,因为这里的storage是函数参数,这个参数只是char *,这样storage[d+1]就是第一个字符,正如错误提示所示,你将char传递给char * ,是错误的。改成search(&storage[d+1])可以搜索从storage下一个字符开始的内容
    另外就是最后的if(search)了,这个search不是变量,是函数指针,那肯定不是空啊,你到底想判断什么呢?是否搜索到什么东西?那你应该在上面的search函数调用时,定义一个变量接收函数返回值,如果为1,则表示搜索成功,如果找到就可以结束,那么应该再加个break

    #include<stdio.h>
    #include<string.h> 
    #include<stdlib.h>
    int search(char *storage){
        int len;
        len=strlen(storage);
        for(int d=0;d<len;d++){
            if(storage[d]!='P'&&storage[d]!='T'&&storage[d]!='A'){
                search(&storage[d+1]);
            }else{
                return 0;
            }
        }
        return 1;
    }
    int main(){
        char storage[100][100];
        int n,i,find = 0;
        scanf("%d",&n);
        for(i=0;i<n;i++){
            scanf("%s",storage[i]);
    }
        for(int j=i-1;j>=0;j--){
            find = search(storage[j]);
            if(find)
                break;
        }
        if(find){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月29日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分