1. 程式人生 > >C語言模擬實現strstr函數,strrstr 函數

C語言模擬實現strstr函數,strrstr 函數

c語言 模擬實現 strstr

strstr和strrstr已經算是字符串中相對比較難的了,但是只要我們善於分析,解剖字符串,就會化難為易。其實學習代碼的過程中需要我們靜下心來分析,理解。

srtstr函數的功能及用法

原型:char *strstr(const char *dst, const char *src);

#include<string.h>

找出src字符串在dst字符串中第一次出現的位置(不包括src的串結束符)。返回該位置的指針,如找不到,返回空指針。

代碼:

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

char *my_strstr(const char *dst, const char *src)
{
	const char *str1 = dst;
	const char *str2 = src;
	const char *fast = NULL;
	assert(dst);
	assert(src);
	while (*str1)
	{
		fast = str1;
		while (*str1 && *str2 && *str1 == *str2)
		{
			str1++;
			str2++;
		}
		if (*str2 == ‘\0‘)
			return (char*)fast;
		str1 = fast+1;
		str2 = src;
	}     
	return NULL;
}

int main()
{
	char arr1[] = "abcdefgdefk";
	char arr2[] = "defk";
	char *ret = my_strstr(arr1,arr2);
	if (*ret)
	{
		puts(ret);
	}
	return 0;
}

解析代碼:

在main函數中定義兩個字符串數組,char arr1[]="abcdefgdefk";char arr2[]="defk";在調用函數中用指針來接收,指針接收的優點是指針指向字符串的首地址,指針最好用const保護起來,以防被破壞。在調用函數中定義三個指針,char *sr1=dst,char* str2=src,char* fast=NULL(避免野指針),使用之前先斷言指針是否存在,如果str1的內容存在進入循環,先將fsat=str1;如果str1指向的內容等於str2指向的內容,str1,str2的地址加加,如果str2的內容等於"\0"了,說明str2字符串的內容在str1字符串中出現,否則str1指向fast指針指向地址的後一個地址,str2返回到它的首地址,繼續執行循環直到str2字符串在str1中第一次出現。

模擬實現strrstr函數

原型:char *strrstr(const char *str1, const char *str2);

#include<string.h>

找出str2字符串在str1字符串中最後出現的位置(不包括str2的串結束符)。返回該位置的指針,如找不到,返回空指針。

#include <stdio.h>
#include <string.h>
#include <assert.h>
char *my_strrstr(const char *dst,const char *src)
{
	char *str1=dst;
	char *str2=src;
	char *fast=NULL;
	char *last=NULL;
	assert(dst);
	assert(src);
	while (*str1)
	{
		fast=str1;
		while (*str1&&*str2&&*str1==*str2)
		{
			str1++;
			str2++;
		}
		if (*str2 == ‘\0‘)
			last=fast;
		str1=fast+1;
		str2 = src;
	}
	if (*str1 == ‘\0‘)
		return /*(char *)*/last;
	/*return NULL;*/
}
int main()
{
	char *Qwe="asdfghasdgfdfgdfgdfgdfgdfg";
	char *Zaq="dfg";
	char *ret=my_strrstr(Qwe,Zaq);
	puts(ret);
	return 0;
}



本文出自 “Dream” 博客,請務必保留此出處http://12951882.blog.51cto.com/12941882/1976515

C語言模擬實現strstr函數,strrstr 函數