strrchr函数

举报
悦来客栈的老板 发表于 2020/12/28 23:04:33 2020/12/28
【摘要】 /* 函数名称: strrchr 函数原型:char *strrchr(const char *str, int c); 所属库: string.h 函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置), 并返回从字符串中的这个位置起,一直到字符串结束的所有字符。如果未能找到指定字符,那么函数将返回NULL。 这...

/*
函数名称: strrchr
函数原型:char *strrchr(const char *str, int c);
所属库: string.h
函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),
并返回从字符串中的这个位置起,一直到字符串结束的所有字符。如果未能找到指定字符,那么函数将返回NULL。


这个函数和strchr函数其实是差不多的,一个是从前往后,一个是从后往前而已。
*/

 


  
  1. #include <stdio.h>
  2. char *strrchr(const char *str, int c)
  3. {
  4. const char *p = str;
  5. while(*p)
  6. {
  7. p++;
  8. }
  9. do

  
  1. {
  2. if (*p == (char)c)
  3. {
  4. return (char*)p;
  5. }
  6. }while(--p>=str)
  7. return NULL;
  8. }
  9. int main(void)
  10. {
  11. char *string = "There are two rings";
  12. char *ptr, c = 'r';
  13. ptr = strrchr(string, c);
  14. if (ptr)
  15. printf("The character %c is at position: %s\n", c, ptr);
  16. else
  17. printf("The character was not found\n");
  18. return 0;
  19. }


 

//linux源码


  
  1. #ifndef __HAVE_ARCH_STRRCHR
  2. /**
  3. * strrchr - Find the last occurrence of a character in a string
  4. * @s: The string to be searched
  5. * @c: The character to search for
  6. */
  7. char *strrchr(const char *s, int c)
  8. {
  9. const char *p = s + strlen(s);
  10. do {
  11. if (*p == (char)c)
  12. return (char *)p;
  13. } while (--p >= s);
  14. return NULL;
  15. }
  16. EXPORT_SYMBOL(strrchr);
  17. #endif


 


  
  1. /**
  2. FUNCTION
  3. <<strrchr>>---reverse search for character in string
  4. INDEX
  5. strrchr
  6. ANSI_SYNOPSIS
  7. #include <string.h>
  8. char * strrchr(const char *<[string]>, int <[c]>);
  9. TRAD_SYNOPSIS
  10. #include <string.h>
  11. char * strrchr(<[string]>, <[c]>);
  12. char *<[string]>;
  13. int *<[c]>;
  14. DESCRIPTION
  15. This function finds the last occurence of <[c]> (converted to
  16. a char) in the string pointed to by <[string]> (including the
  17. terminating null character).
  18. RETURNS
  19. Returns a pointer to the located character, or a null pointer
  20. if <[c]> does not occur in <[string]>.
  21. PORTABILITY
  22. <<strrchr>> is ANSI C.
  23. <<strrchr>> requires no supporting OS subroutines.
  24. QUICKREF
  25. strrchr ansi pure
  26. */
  27. #include <string.h>
  28. char *
  29. _DEFUN (strrchr, (s, i),
  30. _CONST char *s _AND
  31. int i)
  32. {
  33. _CONST char *last = NULL;
  34. if (i)
  35. {
  36. while ((s=strchr(s, i)))
  37. {
  38. last = s;
  39. s++;
  40. }
  41. }
  42. else
  43. {
  44. last = strchr(s, i);
  45. }
  46. return (char *) last;
  47. }

 

 

 

strrchr() 函数的分析
函数原型:extern char * strrchr (const char *s, int c)
参数说明:s为一个字符串的指针,c为一个待查找字符。
       
所在库名:#include <string.h>
 
函数功能:查找在s字符串中最后一次出现字符c的位置。
 
返回说明:如果str 中存在字符ch,返回出现ch的位置的指针;否则返回NULL。
说明:
str
必要参数。指定需要进行搜索的字符串(字符串指针)
c
必要参数。指定需要查找的字符对象。如果是 一个数字,那么他将搜索与这个数字对应的ASCII值相匹配的字符

strrchr()函数源码:
/* 查找在s字符串中最后一次出现字符c的位置 */


  
  1. char * strrchr (const char *s, int c)
  2. {
  3. register const char *found, *p;
  4. c = (unsigned char) c;
  5. //如果查找的字符是结束符,直接用strchr 函数返回结束符号的位置。
  6. if (c == '\0')
  7. return strchr (s, '\0');
  8. //返回值(查找的字符地址)赋初值,很重要。
  9. found = NULL;
  10. //从当前字符串超找字符c,并将返回指针赋给p,如果p不等于NULL,则执行循环。
  11. //如果p等于NULL,说明已查找整个字符串,退出循环。
  12. while ( (p = strchr (s, c)) != NULL )
  13. {
  14. //暂存查找到的字符地址。
  15. found = p;
  16. //截取已经查找过的字符串(将返回地址p的下一个字符地址作为字符串开头)。
  17. s = p + 1;
  18. }
  19. //如果没有找到字符,则不会执行循环,found返回初值NULL。
  20. //如果找到字符,返回p赋给found的指针地址。
  21. return (char *) found;
  22. }



 

 

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/11923695

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。