黑马程序员技术交流社区
标题:
求指教
[打印本页]
作者:
feiyiban
时间:
2016-3-18 00:44
标题:
求指教
//找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。(C语言)
#include <stdio.h>
#include <string.h>
int main()
{
char *s1 = "nbitheimanbcf";
char *s2 = "itheia";
void maxPublicString(char *s1,char *s2);
maxPublicString(s2,s1);
return 0;
}
void maxPublicString(char *s1,char *s2)
{
//分别求出s1,s2字符串的长度
int s1len = strlen(s1);
int s2len = strlen(s2);
//记录相同元素下标,记录相同的元素个数
int index = 0 ,count = 0;
//遍历s1
for(int i = 0; i<s1len ; i++)
{
//遍历s2
for(int j = 0; j<s2len; j++)
{
//取出s2的每一个元素s1进行比较,
if(s1[i]==s2[j])
{
//如果有相同的元素,则同时都往后面移动
for(int k = 1 ;s1[i+k]==s2[j+k] && s2[j+k]!='\0' && s1[i+k]!='\0' ;k++)
{
//选出最大公共字符串
if(k>count)
{
//记录最大公共字符串长度的下标
count =k;
//记录最大公共字符串长度的个数
index = i;
}
}
}
}
}
if(count == 0)
{
printf("没有找到最大公共子串\n");
}
else
{
printf("最长公共字串是:");
for(int i = 0 ; i<=count; i++)
{
printf("%c",s1[index+i]);
}
}
printf("\n");
}
作者:
15527933998
时间:
2016-3-18 08:48
我运行了下,还换了字符的位置都没有问题咕~~(╯﹏╰)b,非常棒!!!
作者:
外号狐狸
时间:
2016-3-18 21:58
#include "stdio.h"
#include "string.h"
void tempstr(char str1[],char str2[]){
char temp[20];
int l = 0;
for (int i = 0; i<strlen(str1); i++) {
for (int j = 0; j<strlen(str2); j++) {
if (str1[i] == str2[j] && str2[j+1] == str1[i+1] && str1[i+1]!='\0') {
temp[l] = str2[j];
temp[l+1] = str2[j+1];
l++;
break;
}
}
}
printf("最大公共字符:%s\n",temp);
}
int main(){
char a[] = "nbitheiman";
char b[] = "itheia";
tempstr(a,b);
return 0;
}
这样写会不会有弊端,帮我看看
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2