[C语言】模拟实现库函数strstr,查找子字符串

//模拟实现库函数strstr,查找子字符串
#include <stdio.h>
#include <assert.h>
char * my_strstr( char *dst, const char * src)
{
	assert(dst);
	assert(src);
	int i, j, k;
	for (i = 0; dst[i] != '\0'; i++)
	{
		for (j = i, k = 0; src[k] != '\0'&&dst[j] == src[k]; j++, k++)
		{
			;
		}
		if (src[k] == '\0'&&k > 0)
			return &dst[i];
	}
	return NULL;
}
int main()
{
	char *p1 = "abcdef";
	char *p2 = "cde";
	printf("%s\n", my_strstr(p1, p2));
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-06 16:04:37

[C语言】模拟实现库函数strstr,查找子字符串的相关文章

strstr查找子字符串函数

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现.该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false.该函数是二进制安全的. //数组 #include <stdio.h>   char *my_strstr(const char *str, const char *sub_str) {     for(int i = 0; str[i] != '\0'; i++)     {         int tem = i; //tem保留主串中的起

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

在父字符串中查找子字符串(指针控制,也可选择标控制) #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

KMP查找子字符串算法

举例说明: S:  ababcababa P:  ababa KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字.其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n).  在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀.  对

字符串匹配算法一:查找子字符串

[题目] 就是给一个很长的字符串str 还有一个字符集比如{a,b,c} 找出str里包含{a,b,c}的最短子串.要求O(n). [例子] 字符集是a,b,c,字符串是abdcaabcx,则最短子串为abc. [分析] 有题意可知,满足要求的字符串只需要包括字符集中的所有字符,并没有顺序要求 当然最容易想到的是做一个字符匹配的过程,但题目要求查找次数为O(n),在思考了几种解决方法后,觉得下面的方案能够达到要求,虽然需要一些额外的空间. 下面我给出自己的解决方案,难免有遗漏的地方,如果路过的朋

[Swift]扩展String类:实现find()查找子字符串在父字符串中的位置

类似于C++中的find()函数:比较等于val的范围中第一个元素的迭代器.如果没有元素匹配,则函数最后返回. 返回值是子字符串在父字符串中的位置(下标记录), 如果没有找到,那么会返回一个特别的标记npos(-1). 返回值可以看成是一个Int型的数. 1 //String扩展 2 extension String { 3 // 截取字符串:从index到结束处 4 // - Parameter index: 开始索引 5 // - Returns: 子字符串 6 func subString

查找子字符串的算法

#include<stdio.h> int main() { char *str1; char *str2; char *ptr=str1; char *p1=NULL; char *p2=NULL; while(*ptr) { p1=ptr; p2=str2;                        /*保证str1和str2的首地址不变*/ while((*p1=*p2)&&(*p1))      /*保证p1已经遍历到了'\0'*/ { p1++; p2++; if

G - Number Sequence( 查找子字符串 )

Given two sequences of numbers : a11, a22, ...... , aNN, and b11, b22, ...... , bMM (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make aKK = b11, aK+1K+1 = b22, ...... , aK+M?1K+M?1 = bMM. If there are more than o

c 查找 子字符串

#include <stdio.h> int Search(char *s1, char *s2) { char *temp = s1; int count = 0; while(*temp != '\0') { char *tmp1 = temp; char *t1 = s2; while(*t1 != '\0' && *tmp1 != '\0') { if(*t1 != *tmp1) break; //如果相等,且到最后,返回1 if(*t1 == *tmp1 &&

C语言中库函数strstr的实现

在C语言中库函数strstr()函数表示在一个字符串str1中查找另一个字符串str2,如果查到则返回str2在str1中首次出现的位置,如果找不到则返回null. char* strstr(char* str,char* s){ int n; if(*s != '\0'){ while(*str){ for(n=0;(*str+n)==(*s+n);n++){ if(!*(s+n+1) == '\0'){ return (char*) str; } } str++; } return NULL