| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1669 人关注过本帖
标题:如何不用string.h函数实现strlen函数?
只看楼主 加入收藏
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
结帖率:89.47%
收藏
已结贴  问题点数:20 回复次数:5 
如何不用string.h函数实现strlen函数?
Description:
不使用strlen函数和其他string.h库中的函数,使用两种方法(递归和非递归)实现统计字符串长度的功能。
函数声明为:
递归:
int RecursionLength(char *s)
非递归:
int NoRecursionLength(char *s)
只用提交函数实现,不用提交main函数
Sample Input:
abcdefghi1234567890
Sample Output:
with recursion: 19
without recursion: 19
下面是主函数
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main() {
        int RecursionLength(char *s);
        int NoRecursionLength(char *s);
        char *s;
        s = (char*)malloc(sizeof(char*) * 60);
        scanf("%s", s);
        printf("with recursion: %d\n", RecursionLength(s));
        printf("without recursion: %d\n", NoRecursionLength(s));
        free(s);
        return 0;
}

我看不懂,不会写
搜索更多相关主题的帖子: recursion 字符串 color 如何 统计 
2016-12-12 11:10
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:10 
程序代码:
int NoRecursionLength(char *s)
{
    int i = 0;
    for (; *(s+i)!='\0' ; i++);
    return i;
}

int RecursionLength(char *s)
{
    static int i;
    if (*(s+i) == '\0')
        return i;
    ++i;
       RecursionLength(s);
      

}

2016-12-12 13:54
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:3 
不用递归很方便,遍历一下存字符串的数组,每次计数器加一。

Code is my life.
2016-12-12 14:00
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
为什么手机回帖会发两遍。。

[此贴子已经被作者于2016-12-12 16:35编辑过]


Code is my life.
2016-12-12 14:01
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:2 
回复 2楼 ldsh304
我觉得正确做法如下:
int RecursionLength(char *s)
{
    if(!*s)return 0;
    return 1+RecursionLength(++s);
}

//关于使用静态变量我很奇怪,静态变量应该是保存值的,紧接着的第二次调用会得到错误的结果,如用你的代码运行printf("%d,%d\n",RecursionLength(“12345678”),RecursionLength(“1234”))应该的结果是8,12。但目前我在vc6上调试未得到这种结果,依然是正确的结果8,4,容后换个编译器试下。

[此贴子已经被作者于2016-12-12 14:35编辑过]

2016-12-12 14:20
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:5 
回复 2楼 ldsh304
果真得到错误答案!不能使用局部静态变量,或者在退出前对静态变量清零。
测试代码如下:
int RecursionLength(char *s)
{
    static int i;
    if (*(s+i) == '\0')
        return i;
    ++i;
       RecursionLength(s);
}
void main()
{
    int i,j;
    j=RecursionLength("123456789");
    i=RecursionLength("1234");
    printf(":%d,%d\n",i,j);
}

正确结果是:9,4
你代码运行结果是:9,9
2016-12-12 14:57
快速回复:如何不用string.h函数实现strlen函数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021805 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved