字符串子串查找strstr

问题:

函数名: strstr

函数原型:char *strstr(const char *str1, const char *str2);

语法:* strstr(str1,str2)

str1: 被查找目标 string expression to search.

str2: 要查找对象 The string expression to find.

返回值:该函数返回str2第一次在str1中的地址,如果没有找到,返回NULL

例子:

charstr[]="1234xyz";

char*str1=strstr(str,"34");

得到str1="34xyz"

方法1:

一个指针扫描,当首字母相同时两个指针扫描两个字符串比较。

代码如下:

#include <stdio.h>
#include <string.h>
#include <assert.h>

char* mystrstr(const char* str1,const char* str2)//str1 is the original string
{
    assert(str1 != NULL);
    if(str2 != NULL) return (char*)str1;
    while(str1 != ‘\0‘){
        if(*str1 != *str2) str1++;
        else{
            char* ori = str1;
            char* des = str2;
            while(*des != ‘\0‘){
                if(*ori == *des){
                    ori++;des++;
                }
                else break;
            }
            if(*des == ‘\0‘) return str1;
        }
    }
    return NULL;
}

int main(){
    char ori[]="sdggdfhhttyusdfge";
    char des[]="ttyu";
    char* ret=mystrstr(ori,des);
    printf("%s\n", ret);
    return 0;
}

结果是

[[email protected] Desktop]# ./a.out
ttyusdfge

方法2:

类似的方法,练练手:

#include <stdio.h>
#include <string.h>

char* mystrstr(const char* str1,const char* str2)//str1 is the original string
{
    int len2 = strlen(str2);
    int len1 = strlen(str1);
    if(!len2) return (char*)str1;
    while(len1 >= len2){
        len1--;
        if(!strcmp(str1,str2,len2)) return (char*)str1;
        str1++;
        }
    }
    return NULL;
}

int main(){
    char ori[]="sdggdfhhttyusdfge";
    char des[]="ttyu";
    char* ret=mystrstr(ori,des);
    printf("%s\n", ret);
    return 0;
}

结果是

[[email protected] Desktop]# ./a.out
ttyusdfge

时间: 2024-10-08 08:15:58

字符串子串查找strstr的相关文章

字符串中查找子串

使用C语言编写程序: 1.在字符串中查找一个指定的字符第一次出现的位置,并返回字符所在的位置,如果不存在则返回NULL 具体实现如下: char* strchr(char const *str, int ch) { char* st = (char*)str; while (st) { if (*st == ch) return st; st++; } return NULL; } 2.在字符串中查找一个指定的字符串第一次出现的位置,并返回字符所在的位置,如果不存在则返回NULL 具体实现如下:

模拟实现在一个字符串中查找一个字符串

在标准库中有一个函数strstr()用于在一个字符串中查找一个规定的字符串,这个函数可以模拟实现一下,代码如下: #include <stdio.h> #include <assert.h> char *my_strstr(const char str[],const char strstr[]) {  int i = 0,j = 0,k = 0;  assert(str != NULL);  assert(strstr != NULL);  for(i = 0;str[i] !=

Wikioi 1204寻找子串位置(strstr()函数)

1204 寻找子串位置 题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述 Output Description 仅一行一个整数 样例输入 Sample Input abcd bc 样例输出 Sample Output 2 数据范围及提示 Data Size & Hint 字符串的长度均不超过100 Pascal用户请注意:两个字符串之间可能包含多个

在父字符串中查找子字符串

在父字符串中查找子字符串(指针控制,也可选择标控制) #pragma once #include<iostream> #include<assert.h> using namespace std; char* StrStr(char* source, char* dest) { assert(source&&dest); if (strlen(source) < strlen(dest)) return NULL; char* newSrc = NULL; c

实现字符串的查找和替换

在字符串中查找目标字符串并将其替换为指定字符串,返回替换的次数.接口为 int find_str_replace(char *&str,const char *find_str,const char *replace_str) 将str中所有find_str替换为replace_str.要求不利用STL,c实现代码如下: #include<stdio.h> #include<string.h> #include<stdlib.h> //查找str从fromwhe

*字符串-01. 在字符串中查找指定字符

1 /* 2 * Main.c 3 * D1-字符串-01. 在字符串中查找指定字符 4 * Created on: 2014年8月18日 5 * Author: Boomkeeper 6 *****部分通过****** 7 */ 8 9 #include <stdio.h> 10 11 int mysearch(char ch, const char str[], int length) { 12 13 int j, ret = -1; 14 15 for (j = 0; j < le

在字符串中查找指定字符

输入一个字符串S,再输入一个字符c,要求在字符串S中查找字符c.如果找不到则输出“Not found”:若找到则输出字符串S中从c开始的所有字符. 输入格式: 输入在第1行中给出一个不超过80个字符长度的.以回车结束的非空字符串:在第2行中给出一个字符. 输出格式: 在一行中按照题目要求输出结果. 输入样例1: It is a black box b 输出样例1: black box 输入样例2: It is a black box B 输出样例2: Not found #include<std

【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回

//模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回 #include <stdio.h> //#include <string.h> #include <assert.h> char* my_strchr(char *dst, char src) { assert(dst); while (*dst != '\0') { if (*dst == src) return dst; dst++; } return 0; } int main()

kmp算法--求字符串子串--《数据结构》严蔚敏

// exam1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; void get_next(int* &next,char* s) { int j=0; int i=1; int len=strlen(s); next=(int*)malloc(len*sizeof(int)); memset(next,0,len*sizeof(int));