那些有趣的字符串操作函数(2)

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">不知不觉,字符串操作函数已经学习完了;</span>

今天就给总结几个比较少见但还是很重要的字符串操作函数:

话不多说直接进入正题:得意

1.模拟实现strchr:

含义:返回一个字符串中某个字符第一次出现的地址,并输出此字符及其后面的字符串;

程序代码:

<strong>#include <stdio.h>
#include<string.h>
#include<assert.h>
char *mystrchr(char const *s,int c)
 {  
     char *p=(char*)s;
     assert(s);
	 
     while(*p && *p!=c)
	 {
		 p++;
	 }
    
		 if(*p==c)
	 {
		  return p;      
         
	 }
		 
		     
     return NULL; 
 }   
 
 int main()
{
    char str[20] = "hello  wrold!";
    char c='l';
    char *p = mystrchr(str,c);
    printf("%s\n",p);
    return 0;
 } </strong>


2.模拟实现strrchr


含义:返回一个字符串中某个字符最后一次出现的地址,并输出此字符及其后面的字符串;

程序代码:

<span style="font-size:24px;"><strong>#include <stdio.h>
#include<string.h>
#include<assert.h>
char *mystrchr(char const *s,int c)
 {
	 char *p=NULL;
	 char *p1=s;
	 assert(s);
	 
   while(*p1)
   {
	   if(*p1==c)
	   {
		   p=p1;//建立一个新的指针p记录他每次出现的地址;
	   }
		p1++;
   }
   return p;
    
		     
     return NULL; 
 }   
 
 int main()
{
    char str[20] = "hello  wrold!";
    char c='l';
    char *p = mystrchr(str,c);
    printf("%s\n",p);
    return 0;
 }   </strong></span>
3.strstr

格式:char*  my_strstr(const char* s1,const  char *s2)

含义:查找字符串s2是否为字符串s1的字串;如果是,函数返回在字符串s1中  第一次出现的s2  的首字符  在s1中的位置; 

程序代码:

#include<stdio.h>
#include<string.h>
#include<assert.h>
char*  my_strstr(const char* s1,const  char *s2)
{
	const char* str1=s1;
	const char* str2=s2;
	const char* str3=NULL;
	assert(s1);
	assert(s2);
	while(*str1)
	{    str3=str1;
		while((*str1==*str2) && *str1 && *str2)
		{
			str1++;
			str2++;
		}
		if(*str2=='\0')
		{
			return (char*)str3;
		}
		else
			str1=str3+1;
		    str2=s2;
	}
	return NULL;
}
int main()
{
	char *p1="abcderdleldefd";
	char *p2="def";
	char *p3=my_strstr(p1,p2);
	printf("%s",p3);
	return 0;
}
4.strrstr
含义:查找字符串 s2是否为字符串s1的字串;如果是,函数返回在字符串s1中  最后一次出现的s2  的首字符  在s1中的位置; 

程序代码:
<strong>#include<stdio.h>
#include<string.h>
#include<assert.h>
char*  my_strstr(const char* s1,const  char *s2)
{
	const char* str1=s1;
	const char* str2=s2;
	const char* str3=NULL;
	const char* str4=NULL;
	assert(s1);
	assert(s2);
	while(*str1)
	{   str3=str1;//记录下一次源字符串的比较的起始位置
		while((*str1==*str2) && *str1 && *str2)
		{
			str1++;
			str2++;
		}
		if(*str2=='\0')
		{
			str4=str3;
            
		}
			str1=str3+1;//源字符串向后移动一个位置;
		    str2=s2;//目标字符串回到开头位置;
			
	}
	if(*str1=='\0')
	{
		return (char*)str4;
	}
	return NULL;
}
int main()
{
	char *p1="aaadeffffdefcccc";
	char *p2="def";
	char *p3=my_strstr(p1,p2);
	printf("%s",p3);
    return 0;
}
</strong>
ok!!!继续变强。 生气


你可能感兴趣的:(那些有趣的字符串操作函数(2))