思路:先求最小的字符串长度和小标,之后拿字符串比较函数一个个字符和前面的比较,记下第几个不返回零,之后再去比较后面的字符串重复步骤,最后用字符串截取代表最长公共前缀的变量值
废话不多说,上实现代码:
第一部分:让用户输入字符串以达到比较效果
char** str = (char**)malloc(sizeof(char*) * 201);
for (int i = 0; i < 201; i++)
{
str[i] = (char*)malloc(sizeof(char) * 201);
str[i][0] = '\0';
}
for (int i = 0; i < 200; i++)
{
printf("请用户输入字符串:");
char input[201] = "";
scanf("%s",input); //输入字符串内容
strcpy(str[i],input); //将字符串赋值到动态内存中
while (getchar() != '\n');
printf("你是否要继续录入:(Y\N)");
char keep = 0;
scanf("%c", &keep);
if (keep == 'N' || keep == 'n')
{
break;
}
}
judge(str);
第二部分:字符串对比具体实现代码
void judge(char** str)
{
int strary = strlen(str); //一共有多少个字符串
int shorlen = strlen(str[0]); //最小字符串的字符数
int index = 0; //长度最小字符串下标数
int longpr = 0; //最长公共前缀
for (int i = 1; i < strary - 1; i++)
{
if (strlen(str[i]) < shorlen)
{
shorlen = strlen(str[i]);
index = i;
}
}
longpr = shorlen;
for (int i = 0; i < index; i++)
{
for (int j = 1; j <= longpr; j++)
{
if (strncmp(str[i], str[index], j) != 0)
{
longpr = j - 1;
}
}
}
for (int i = index + 1; i < strary - 1; i++)
{
for (int j = 1; j <= longpr; j++)
{
if (strncmp(str[index], str[i], j) != 0)
{
longpr = j - 1;
break;
}
}
}
char result[201] = "";
strncpy(result, str[index], longpr);
printf("最长公共前缀是:");
puts(result);
}
今日分享完毕,谢谢观看