| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 648 人关注过本帖
标题:c和指针 又一个题目 <感觉自己很笨,代码写的很繁琐,而且传入参数为'\0'时 ...
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
strlen可以自己实现

DO IT YOURSELF !
2012-12-02 11:48
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 9楼 wp231957
*p_s++ 相当于 *(p_s++);
p_s++ 已经是指针移位操作了,再取指向没有必要,所以说多此一举


[fly]存在即是合理[/fly]
2012-12-02 11:56
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
脑细胞不够用,懒得去实现了...
不过我认为楼主的稍微有点绕脑,我的思维相对简单一点,应该对楼主也能有点帮助

当然啦,纯属个人自恋,楼主不爽的话可以丢板砖砸我

I have not failed completely
2012-12-02 11:58
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
一个"*"说明楼主对指针不熟,多练习吧

总有那身价贱的人给作业贴回复完整的代码
2012-12-02 12:01
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用embed_xuel在2012-12-2 12:01:36的发言:

一个"*"说明楼主对指针不熟,多练习吧
是的,不熟悉,我主要靠调试

DO IT YOURSELF !
2012-12-02 12:39
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <time.h>
#include <stdlib.h>
#define max 50000000

int is_substr(char* str,const char* substr)
{
    int i=0,j;
    int s_len=0;
    int sub_len=0;
    bool flag=true;   //标记子串是否在源串中
    char* p_s=str;    //临时指针
    const char* p_sub=substr;  //临时指针
    while(*p_s!=NULL)
    {
        s_len++;
        p_s++;
    }  //计算源串长度
    while(*p_sub!=NULL)
    {
        sub_len++;
        p_sub++;
    }  //计算子串长度
    p_sub=substr;
    p_s=str;
    if(sub_len>=s_len) return 0;  //如果子串长度大于等于源串长度 直接返回
    while(i<s_len-sub_len+1)     //更正原来的一个bug增加一个(长度+1)
    {
        for(j=0;j<sub_len;j++)  //这个循环用于判断子串是否在源串之间被包含
        {
            if(*p_s!=*p_sub)
            {
                flag=false;
                break;
            }
            p_s++;
            p_sub++;
        }
        if (flag==true)     //找到字串直接返回
        {
           return 1;
        }
        i++;               //下面几句也是用于用于判断子串是否在源串之间被包含
        if(i!=s_len-sub_len+1) flag=true;   //更正原来的一个bug增加一个(长度+1)
        p_sub=substr;
        p_s=++str;         //一个一个的移动源串指针 用于用于判断子串是否在源串之间被包含
    }
     return 0;
}


int main()
{
    srand((unsigned)time(NULL));
    clock_t start,finish;
    start=clock();

    char* dest;
    char tmp;
    int i=0;
    dest=(char*)malloc(max);
    //可见字符除了空格外,范围是0x21~~0x7e
    while(i<max)
    {
        tmp=rand()%(0x7e+1);
        if(tmp>=0x21 && tmp<=0x7e)
        {
            dest[i]=tmp;
            i++;
        }
    }
    dest[i]='\0';
    dest[i-1]='D';
    dest[i-2]='C';
    dest[i-3]='B';
    dest[i-4]='A';
    char *test="ABCD";
    i=is_substr(dest,test);
    printf("%d\n",i);
    finish=clock();
    printf("%.3lf\n",((double)finish-start)/1000);

    return 0;
}
感觉这个判断一个字串是否在另一个字串中的函数还可以啊
随机生成了5000万个字符串 并在该字符串中搜索字串
用时不到2秒

DO IT YOURSELF !
2012-12-04 11:45
快速回复:c和指针 又一个题目 <感觉自己很笨,代码写的很繁琐,而且传入参数为' ...
数据加载中...
 
   



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

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