题目:
Write a function to find the longest common prefix string amongst an array of strings.
求一系列字符串的公共字符串前缀。
题目解析:
没有想到很好的方法,只能一个字符串一个字符串的相比较,最后求得公共字符串。不过题目中还是有很多需要注意的地方的。
1:我如何定义一个字符串数组?char *str[]。其中每个指针都指向一个字符串。但是不能用sizeof()或者strlen来求。其求的知识占据的空间或者字符串长度。需要再函数中显示定义该数组的长度。
2:当数组的个数小于等于0时或者已经确定了字符串为空的时候,应该退出循环函数,返回空串。
3:我们只是用一个下标index表示,最多指向那个位置,而不要另分配数组来保存。在求得最终的index后,才分配空间。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 4
char *LongestCommonPrefix(char *str[],int n);
int main()
{
char *str[MAX] = {"abcdeadb","abcdeadd","abcdedab","abcdeade"};
char *arr;
arr = LongestCommonPrefix(str,MAX);
printf("arr = %s",arr);
free(arr);
return 0;
}
char *LongestCommonPrefix(char *str[],int n)
{
int i,index = strlen(str[0]);
if(n <= 0)
return "";
printf("index = %d\n",index);
for(i = 1;i < MAX;++i){
index = index < strlen(str[i]) ? index : strlen(str[i]);
if(index == 0){
return "";
}
for(int j = 0;j < index;++j){
if(str[i][j] != str[0][j]){
index = j; //index表示个数
break;
}
}
}
char *arr = (char *)malloc((index+1) * sizeof(char));
memcpy(arr,str[0],index);
arr[index] = '\0';
return arr;
}