第一次问问题,求各位大佬帮帮忙(用指针,递归求字符串长度)

kerinkyire 2017-12-13 11:28:11
#include<stdio.h> int f(int *p1,int*p2) { int L; if(*p1==*p2) return 1; f(*p1,*p2)=f(*p1,*(p2-1) )+1; L=f(*p1,*p2); return (L); } int main() { int *p1,*p2; char str[100]; scanf("%s",str); p1=str[0]; *p2=*p1; while(*p2) { *(p2++); } *(p2--); printf("%d\n",f(*p1,*p2)); return 0; }
...全文
355 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky065530 2017-12-14
  • 打赏
  • 举报
回复
引用 7 楼 sky065530 的回复:
看着你这个函数,我觉得是不是想做下面这几步, 1, p1指向字符串头 2, p2指向字符串尾 3,用递归将 p2向前移动,p1 = p2时停止,记录p2移动了多少次 4,然后返回p2移动的次数(移动一次就代表一个字符?)
但是你的代码完全不对路子,不知道要干什么。
sky065530 2017-12-14
  • 打赏
  • 举报
回复
看着你这个函数,我觉得是不是想做下面这几步, 1, p1指向字符串头 2, p2指向字符串尾 3,用递归将 p2向前移动,p1 = p2时停止,记录p2移动了多少次 4,然后返回p2移动的次数(移动一次就代表一个字符?)
自信男孩 2017-12-14
  • 打赏
  • 举报
回复
引用 4 楼 kerinkyire 的回复:
[quote=引用 3楼自信男孩 的回复:]
#include<stdio.h>

int get_str_length(const char *str);

#if 0
int f(int *p1, int *p2)
{
    int  L;

    if(*p1==*p2) return 1;
    f(*p1,*p2)=f(*p1,*(p2-1) )+1;
    L=f(*p1,*p2);
    return (L);
}
#endif

int main()
{
    char str[100];
    scanf("%s", str);
    printf("%d\n", get_str_length(str));
#if 0
    int *p1,*p2;
    p1=str[0];
    *p2=*p1;
    while (*p2)
    {
        p2++;
    }
    *(p2--);
    printf("%d\n",f(*p1,*p2));
#endif
    return 0;

}

int get_str_length(const char *str)
{
    if (*str == '\0')
        return 0;
    else
        return get_str_length(str + 1) + 1;
}
参考一下吧 如果用两个指针,既然用while循环得到p2的值,为什么再求字符串长度呢,那不是在这个while循环里加一个计数器不就实现了吗?
作业上规定的我也没办法,要同时用指针,定义函数递归求长度[/quote] 使用指针,现在也使用了指针呢,形参也是指针呢。但是作业要求两个指针了吗?一个手首指针,一个尾指针。如果是这样的话,布置作业的的老师对于作业的目的是有点牵强了。 如果用首尾指针递归求字符串长度,那么和求学校到家里的距离,两个人,两个人都从家出发,一个人先从家走到学校,然后另一个人从家出发,遇到已经走到学校的人停止计算。那么第一个人从家里触发走到学校已经能算出距离了。
赵4老师 2017-12-14
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
kerinkyire 2017-12-13
  • 打赏
  • 举报
回复
引用 1楼AndyStevens 的回复:
看不到你的这个递归要表达什么,明明一个循环就可以解决问题
作业规定要同时用指针和递归..
kerinkyire 2017-12-13
  • 打赏
  • 举报
回复
引用 3楼自信男孩 的回复:
#include<stdio.h>

int get_str_length(const char *str);

#if 0
int f(int *p1, int *p2)
{
    int  L;

    if(*p1==*p2) return 1;
    f(*p1,*p2)=f(*p1,*(p2-1) )+1;
    L=f(*p1,*p2);
    return (L);
}
#endif

int main()
{
    char str[100];
    scanf("%s", str);
    printf("%d\n", get_str_length(str));
#if 0
    int *p1,*p2;
    p1=str[0];
    *p2=*p1;
    while (*p2)
    {
        p2++;
    }
    *(p2--);
    printf("%d\n",f(*p1,*p2));
#endif
    return 0;

}

int get_str_length(const char *str)
{
    if (*str == '\0')
        return 0;
    else
        return get_str_length(str + 1) + 1;
}
参考一下吧 如果用两个指针,既然用while循环得到p2的值,为什么再求字符串长度呢,那不是在这个while循环里加一个计数器不就实现了吗?
作业上规定的我也没办法,要同时用指针,定义函数递归求长度
自信男孩 2017-12-13
  • 打赏
  • 举报
回复
#include<stdio.h>

int get_str_length(const char *str);

#if 0
int f(int *p1, int *p2)
{
    int  L;

    if(*p1==*p2) return 1;
    f(*p1,*p2)=f(*p1,*(p2-1) )+1;
    L=f(*p1,*p2);
    return (L);
}
#endif

int main()
{
    char str[100];
    scanf("%s", str);
    printf("%d\n", get_str_length(str));
#if 0
    int *p1,*p2;
    p1=str[0];
    *p2=*p1;
    while (*p2)
    {
        p2++;
    }
    *(p2--);
    printf("%d\n",f(*p1,*p2));
#endif
    return 0;

}

int get_str_length(const char *str)
{
    if (*str == '\0')
        return 0;
    else
        return get_str_length(str + 1) + 1;
}
参考一下吧 如果用两个指针,既然用while循环得到p2的值,为什么再求字符串长度呢,那不是在这个while循环里加一个计数器不就实现了吗?
真相重于对错 2017-12-13
  • 打赏
  • 举报
回复
int length( char* p ) { if(p[0]=='\0') return 0; else return length(p+1)+1; }
AndyStevens 2017-12-13
  • 打赏
  • 举报
回复
看不到你的这个递归要表达什么,明明一个循环就可以解决问题

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧