做题目的时候须要自己实现strstr函数

/************************************************************************/
/* 编写函数IND。让它推断一个字符串是否为还有一个字符串的子串的功能。若是则返回第一次出现的起始位置,否则返回0。
/*
/************************************************************************/ #include <stdio.h>
#include <assert.h> const char * IND(const char * str, const char * substr)
{
assert(substr != NULL && str != NULL);
const char * psub = substr;
const char * pstr = str; while (*pstr)
{
// if (*pstr != *psub)
// continue; const char * tmp = pstr;
while (*tmp++ == *psub++); if (*psub == '\0')
return pstr; psub = substr;
pstr++;
} return NULL;
} int main()
{
//char * substr = "hello";
char * substr = "";
char * str = "skljdfhellosjdlf"; const char * res = IND(str, substr);
if (res != NULL)
printf("%s\n", res);
else
printf("not find\n"); res = strstr(str, substr);
if (res != NULL)
printf("%s\n", res);
else
printf("not find\n"); return 0;
}

这是微软提供的库函数版本号

/***
*strstr.c - search for one string inside another
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines strstr() - search for one string inside another
*
*******************************************************************************/ #include <cruntime.h>
#include <string.h> /***
*char *strstr(string1, string2) - search for string2 in string1
*
*Purpose:
* finds the first occurrence of string2 in string1
*
*Entry:
* char *string1 - string to search in
* char *string2 - string to search for
*
*Exit:
* returns a pointer to the first occurrence of string2 in
* string1, or NULL if string2 does not occur in string1
*
*Uses:
*
*Exceptions:
*
*******************************************************************************/ char * __cdecl strstr (
const char * str1,
const char * str2
)
{
char *cp = (char *) str1;
char *s1, *s2; if ( !*str2 )
return((char *)str1); while (*cp)
{
s1 = cp;
s2 = (char *) str2; while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++; if (!*s2)
return(cp); cp++;
} return(NULL); }

得到的效果是一致的, 只是。 我们这里没有使用强制类型转化将const char * 转化为 char *类型,(事实上从这点上来看, C中的const仅仅是一个纸老虎, 一个强制类型转换就没了<-_->!!)

库函数代码中

 if ( !*str2 )
return((char *)str1);

感觉似乎没有这段也是能够输出预期的结果的。

C中strstr的实现方法的更多相关文章

  1. JavaScript中Math对象的方法介绍

    1.比较最值方法 比较最值有两种方法,max() 和 min() 方法. 1.1 max() 方法,比较一组数值中的最大值,返回最大值. var maxnum = Math.max(12,6,43,5 ...

  2. Android中锁定文件的方法

    androidSDK中并没有锁定文件相关的api. 但是android是基于linux操作系统的,linux比较底层,灵活性也更大,为了实现锁定文件的效果,大概有以下几种办法: 用chmod命令修改文 ...

  3. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...

  4. Eclipse中自动提示的方法参数都是arg0,arg1的解决方法

    Eclipse中自动提示的方法参数都是arg0,arg1,就不能根据参数名来推断参数的含义,非常不方便. 解决方法:Preferences->Java->Installed JREs,发现 ...

  5. Power BI官方视频(2) Power BI嵌入到应用中的3种方法

    今天给大家介绍3种将Power BI嵌入到应用中的方法. 本文原文地址:Power BI官方视频(2) Power BI嵌入到应用中的3种方法 Power BI系列文章地址:微软Power BI技术文 ...

  6. JQuery中each()的使用方法说明

    JQuery中each()的使用方法说明 对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法.换句话说:jQuery提供的eac ...

  7. Dedecms去掉URL中a目录的方法

    本文实例讲述了Dedecms去掉URL中a目录的方法.分享给大家,供大家参考.具体分析如下: 使用dedecms的朋友可能会发现自己的URL目录生成是会自动带有一个/A/目录了,那么要如何去掉URL中 ...

  8. 【转】C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...

  9. inux中shell截取字符串方法总结

    shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

随机推荐

  1. KVM-克隆和快照管理

    kvm 虚拟机有两部分组成:img镜像文件和xml配置文件 /etc/libvirt/qemu #xml配置文件目录,存在虚拟机所有的详细信息 1.kvm虚拟机克隆 克隆命令 virt-clone - ...

  2. java逆向相关

    1.将war文件导入到Eclipse 在导入war文件之前,新建项目,比如:webPorject 在Myeclipse中:在File===>import==>General中选择Archi ...

  3. 解决cordova命令行方式下build或者run的时候报错问题

    phonegap3.0之后就将项目的生成方式做了很大的更改,原来是在eclipse里面修改生成并编译运行,但是3.0之后它的目录结构发生了很大变化,只修改主目录下面的index.html如果不buil ...

  4. MAC安装go

    下载官方pkg文件,一路傻瓜next就行了. pkg默认是安装到/usr/local/go 安装完成,接下来是配置mac下的环境变量.打开终端(Terminal),敲入一下代码:cd ~ #进入当前用 ...

  5. 【codevs1074】食物链

    [codevs1074]食物链 2001年NOI全国竞赛  时间限制: 3 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond   题目描述 Description 动物王国中有 ...

  6. [ARC097F]Monochrome Cat

    题意:一棵树,每个节点是黑色或白色,你可以从任意节点开始进行一些操作并在任意节点结束,如果当前在$x$,那么一次操作可以是:1.走到相邻节点$y$并翻转$y$的颜色,2.翻转$x$的颜色,问把所有节点 ...

  7. [Luogu2656]采蘑菇

    题目大意: 给你一个有向图,每条边有一个边权w以及恢复系数k, 你从s点出发乱走,经过某条边时会获得相应的收益w,而当第二次经过这条边时相应的收益为w*k下取整. 问你最大能获得的收益为多少? 思路: ...

  8. 零起点学算法09——继续练习简单的输入和计算(a-b)

    #include<stdio.h> int main() { int a,b; scanf("%d %d",&a,&b); printf("% ...

  9. php红包

    /**   转http://www.oschina.net/code/snippet_1392428_54532     谢谢 php_fangting * @param $total [你要发的红包 ...

  10. js 根据开始日期和结束日期显示倒计时

    <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con ...