当前位置:   article > 正文

C语言----最长公共前缀_c语言编写一个函数来查找字符串数组中的最长公共前缀

c语言编写一个函数来查找字符串数组中的最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

  1. 输入: ["flower","flow","flight"]
  2. 输出: "fl"

示例 2:

  1. 输入: ["dog","racecar","car"]
  2. 输出: ""

说明:

所有输入只包含小写字母 a-z 。

题解:

1,以数组的第一个字符串为标杆,依次循环取出第一个字符串的前缀字符串

2,从数组的第二个字符串开始和第一个取出来的前缀字符串进行比较

3,用一个变量保存符合公共字符串的长度

注意:在循环比较中,要注意数组溢出的情况。另外假如取出来的前缀字符串比中间的某个字符串长度还大,则没有继续匹配下去的必要了,跳出循环

知识点:

C 库函数 int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字节。

参数:

  • str1 -- 要进行比较的第一个字符串。
  • str2 -- 要进行比较的第二个字符串。
  • n -- 要比较的最大字符数。

返回值

  • 如果返回值 < 0,则表示 str1 小于 str2。
  • 如果返回值 > 0,则表示 str2 小于 str1。
  • 如果返回值 = 0,则表示 str1 等于 str2。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. char *longestCommmonPrefix(char **strs,int strSize)
  5. {
  6. int i,j;
  7. int flag = 0,max=0;
  8. for(i=1; i<=strlen(*strs) && flag!=2; i++)
  9. {
  10. flag = 0;
  11. for(j=1; j<strSize; j++)
  12. {
  13. if(i<=strlen(strs[j]) && strncmp(*strs,strs[j],i) != 0)
  14. {
  15. flag = 1;
  16. break;
  17. }
  18. if(i>strlen(strs[j]))
  19. {
  20. flag = 2;
  21. break;
  22. }
  23. }
  24. if(flag == 0)
  25. max = i;
  26. }
  27. char *result = (char *)malloc((max+1)*sizeof(char));
  28. memset(result,0,max+1);
  29. memcpy(result,strs[0],max);
  30. return result;
  31. }
  32. int main()
  33. {
  34. /*
  35. example 1: char *strs[3]= {"flowers","flow","flight"};
  36. example 2: char *strs[3]= {"dog","racecar","car"};
  37. */
  38. char *strs[3]= {"flowers","flow","flight"};
  39. char *prefix = longestCommmonPrefix(strs,3);
  40. printf("%s\n",prefix);
  41. free(prefix);
  42. prefix = NULL;
  43. return 0;
  44. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/446079
推荐阅读
相关标签
  

闽ICP备14008679号