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

来源:互联网 发布:淘宝上怎么搜联通黑卡 编辑:程序博客网 时间:2024/05/17 19:58

<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;}elsestr1=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!!!继续变强。生气


0 0
原创粉丝点击