實作strchr:查找一個字元c在另一個字元串str中第一次出現的位置找到傳回該位置的指針,找不到傳回NULL
#include <stdio.h>
char *my_strchr( const char *str, int c)
{
while(*str)
{
if(*str == c)
return (char *)str;
*str++;
}
return NULL;
}
int main()
{
char *str=NULL;
char *arr="hello every.";
str=my_strchr(arr,'o');
if(str != NULL)
{
printf("%c\n", *str);
}
return 0;
}
實作strrchr:查找一個字元c在另一個字元串str中最後出現的位置,如果找到了傳回一直到字元串結束的所有字元。如果未能找到指定字元,那麼函數将傳回NULL
#include <stdio.h>
#include <string.h>
char * my_strrchr (const char * str,int c)
{
char *start = (char *)str;
while (*str++) //尋找最後一個字元的位置
;
while ((--str != start)&&(*str != (char)c))
;
if (*str == (char)c)
return (char *)str;
return(NULL);
}
int main()
{
char *arr="hello every.";
char *ret=my_strrchr(arr,'e');
if(ret != NULL)
{
printf("%s\n", ret);
}
return 0;
}
實作strrstr:在字元串中查找指定字元串最後一次出現的位置
#include <stdio.h>
#include <assert.h>
char *my_strrstr(char *str1, char *str2)
{
char *start1=str1;
char *start2=str2;
char *p =str1;
while (*p)
{
start1=p;
while((*start1 != '\0')&&(*start2 != '\0')&&(*start1 == *start2))
{
*start1++;
*start2++;
}
if(*start2 == '\0')
{
return p;
}
start2=str2;
p++;
}
return NULL;
}
int main()
{
char *arr1="hello every.";
char *arr2="eve";
char *ret=my_strrstr(arr1,arr2);
printf("%s\n",ret);
return 0;
}
練習使用strtok:将一個整串字元串中的某些特定字元隔開的字元分割開來
#include <stdio.h>
char *my_strtok(char *str1, const char *str2)
{
char *p1=str1;
char *p2=(char *)str2;
while(*str1++ ==*str2++)
{
return p1;
}
while(*p1)
{
str1=NULL;
if(*str1++ == *str2++)
return p1;
}
}
int main()
{
char *str="we are happy";
char arr[20]={0};
char *ret=my_strtok(str," ");
printf("%s\n",ret);
}