黑马程序员技术交流社区
标题:
C语言中的字符串小问题
[打印本页]
作者:
啊康
时间:
2014-4-9 10:18
标题:
C语言中的字符串小问题
各位大神,对于字符串我认为自学的还可以,但是遇到寻找两个字符串的最小或者最大子串我就晕了!求大神指点!例如adfghsdfgdfa和hsdfgertad这两个字符串中的最大子串该如何查找?我想的是将两个字符串分别遍历,利用双for循环来比较,但是中间比较的思路总是理不清感觉很乱!请各位大神指点迷津!谢谢!!
作者:
FlyTrem
时间:
2014-4-9 10:47
先定义一个最长公共字符串字符个数为MAX=0.
然后开始遍历两个字符串的字符,判断是否相同,相同公共字符数 i 加一,并跳过本次循环。
如果不同则判断MAX和i,如果MAX小于i,则令MAX等于i,且记录公共字符串的开始与结束位置,并清零i值。
然后输出公共字符串就好了!
作者:
董月峰
时间:
2014-4-9 10:59
本帖最后由 董月峰 于 2014-4-9 11:42 编辑
这是我的基础测试最后一题。我给下我写的求2个最大公共字符串的函数吧
//比较2个字符串最大公共子串(串1,串2,串1长,串2长)
void maxstr(char *s1,char *s2,int num1,int num2)
{
//index表示字符相同时s1初始角标,n2表示公共子串初始长度是0,n1表示每个公共子串的长度
int index=0,n2=0,n1;
//遍历s1
for(int i = 0; i <= num1; i++)
{
//遍历s2
for(int j = 0; j <= num2; j++)
{
//若遇到相同字符
if(s1
==s2[j])
{
//先赋值子串长度是1
n1 = 1;
//看从相同字符向后有多少字符还相同
for(int k = 1; s1[i+k]==s2[j+k]; k++)
//每多一个相同字符,n1自增1
{
n1++;
}
//取n2为最长的n1
if(n1 > n2)
{
//记录最长n2时候,s【i】的角标位置index
index = i;
n2 = n1;
}
//再与s1
比较,从s2【n1+j】即可
j += n1;
}
}
}
//当存在子串时候,输出最大的
if(n2 !=0)
{
printf("最长的公共子串:");
for(int i = 0; i < n2; i++)
printf("%c",s1[index+i]);
}
//不存在子串输出没有
else
printf("没有公共子串!\n");
}
-----------分割线----------------
1.字符串长用strlen函数可求
2.求n个字符串串长可以根据以上函数用 递归 做
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2