strstr实现方式之一

strstr

char *ho_strstr(const char *s1, const char *s2) {
    const char *p1, *p2;
    
    if (*s2 == ‘\0‘)
        return (char *)s1;
        
    for (; *s1; s1++) {
        p1 = s1; 
        p2 = s2; 
        for (;*p1 && (*p1 == *p2); p1++, p2++) {
            ;   
        }   
        if (*p1 == ‘\0‘)
            return (char *)s1;
    }   
    return NULL;
}

int main() {

    printf("%s\n", ho_strstr("1234678abc", "abc"));
    printf("%s\n", ho_strstr("1234678abc", "sss"));
    printf("%s\n", ho_strstr("1234678abc", "bc"));
    return 0;
}
时间: 2024-08-07 08:37:35

strstr实现方式之一的相关文章

vs创建控制台程序使用C++读写excel文件(ODBC方式)

1.创建一个vs项目,选择windows控制台应用程序,项目名称输入cppRWexcel 2.在StdAfx.h文件最下方加入如下代码: #include <iostream> #include <afxdb.h> #include <odbcinst.h> using namespace std; 3.在cppRWexcel.cpp中写入如下代码: // cppRWexcel.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h

Implement strStr() &amp;&amp; kmp算法

用这题复习下kmp算法.kmp网上坑爹的是有很多种匹配方式,容易混淆,后人要警惕啊.这里对要查找的字符串的next全部置为-1,预处理时i和next[i-1]+1相比较.和http://kb.cnblogs.com/page/176818/ 这里相似.预处理完再匹配,第i个字符不匹配则比较第next[i-1]+1个. class Solution{ public: char *strStr(char *haystack, char *needle){ if(haystack == NULL ||

递归方式解析出字符串中的@某人

<?php $userList = []; /** * 用递归的方式来查找字符串中的 @用户名 * 用法:@用户名之后需要加空格隔断,才能检测到 * @param $content */ function fetchAt($content) { global $userList; $afterAt = strstr($content, '@'); //@符号之后 if ($afterAt) { $username = strstr($afterAt, ' ', true); //用户名 if (

用java实现的strstr函数的一些问题

用java实现过程如下: 1 public static int strstr(char[] cArray1,char[] cArray2){ 2 if(cArray1!=null && cArray2!=null 3 && !cArray1.equals("") && !cArray2.equals("") 4 && cArray1.length>=cArray2.length){ 5 int

[移动端]移动端上遇到的各种坑与相对解决方式

mobileHack 这里收集了很多移动端上遇到的各种坑与相对解决方式 1.问题:手机端 click 事件会有大约 300ms 的延迟 原因:手机端事件 touchstart –> touchmove –> touchend or touchcancel –> click.由于在touch事件触发之后,浏览器要推断用户是否会做出双击屏幕的操作,所以会等待300ms来推断,再做出是否触发click事件的处理.所以就会有300ms的延迟 解决方法:使用touch事件来取代click事件.如

C++ 删除字符串的两种实现方式

C++实现删除给定字符串的给定字符串思路主要有这么几种实现方式: 1.KMP算法2.用STL的string的 find,然后用erase3.用C的strstr找到字串位置,然后用strncpy写到新串中4.用boost库,用正则表达式 测试过的完整代码: 第一种方法: #include<iostream> #include <string> using namespace std; void deletestr(const char *str, const char* sub_st

[C/C++]_[中级]_[使用智能指针的方式释放malloc出来的堆空间]

场景: 1. 使用auto_ptr 的方式可以wrap类对象,  之后在方法结束后可以自动释放对象, 参考:这样在有条件判断的语句时可以省掉free语句或CloseHandle. http://blog.csdn.net/infoworld/article/details/9008911 2.C++的特性之一就是类对象(非返回值的对象)在方法结束后会自动调用析构函数,这样在析构函数里可以放一些释放资源的操作. 3. 这里实现了一个类似auto_ptr的类的实用Wrap类,可以参考根据自己需要自定

[PHP源码阅读]strpos、strstr和stripos、stristr函数

strpos mixed strpos ( string $haystack, mixed $needle [, int $offset = 0 ] ) 如果offset指定了,查找会从offset的位置开始.offset不能为负数. 返回needle第一次出现在haystack的位置.如果在haystack中找不到needle,则返回FALSE. needle,如果needle不是字符串,它会被转换成整型数值并赋值为该数值的ASCII字符.请看下面例子. 例子 $str = "hello&qu

4 C 语言 数值存储方式 数组

源码 补码 反码 数组定义,初始化,使用,随机数 找最大数,逆置,冒泡排序, scanf 输入字符串 字符串处理 字符串溢出等问题 scanf() gets() puts() fputs() strlen() strcat() strncat() strcmp() strncmp() strchr() strstr() strtok() atoi() atof() atol() C 字符串数组 定义数组 遍历输出数组每个元素的值 //GCC 编译方式: C:\MinGW\project>gcc