黑马程序员技术交流社区
标题:
截取最大公共字符串
[打印本页]
作者:
EchoWill
时间:
2014-4-28 11:02
标题:
截取最大公共字符串
本帖最后由 EchoWill 于 2014-4-28 19:19 编辑
#include <stdio.h>
#include <string.h>
void maxStr(char *s1 ,char *s2,int num1,int num2);
int main(int argc, const char * argv[])
{
// 定义2个字符串
char str1[1024],str2[1024];
while (1) {
printf("请输入第一个子串:\n");
gets(str1);
int len1 = strlen(str1); // 获取字符串str1的长度
printf("请输入第二个子串:\n");
gets(str2);
int len2 = strlen(str2); // 获取字符串str2的长度
maxStr(str1, str2, len1, len2);
getchar();
}
return 0;
}
// 获取最大公共字符串,字符串s1长度num1,字符串s2长度num2
void maxStr(char *s1 ,char *s2,int num1,int num2)
{
int index = 0; // 字符相同时,字符串s1的初始下标
int n1; // 每个公共子串的长度
int n2 = 0; // 公共子串的初始长度
// 循环遍历2个字符串
for (int i = 0; i<num1; i++)
{
for (int j = 0; j< num2; j++)
{
if (s1[i] == s2[j] && s1[i]!='\0') // 当字符相同时,给定子串长度为1
{
n1 = 1;
// 循环判断相同字符数
for (int k = 1; s1[i+k]==s2[j+k] && s1[i+k]!='\0'; k++)
{
n1++;
}
// 找到最长子串时,设置下标index
if (n1>n2)
{
index = i;
n2 = n1 ;
}
j+=n1-1;
}
}
}
if (n2!=0)
{
printf("最大公共子串:\n");
for (int i = 0; i<n2; i++) {
printf("%c",s1[index+i]);
}
}
else
{
printf("没有公共子串!\n");
}
}
复制代码
功能没实现,大家有解决方案吗?
作者:
胡铭
时间:
2014-4-28 11:33
本帖最后由 胡铭 于 2014-4-28 14:44 编辑
#include <stdio.h>
#include <string.h>
void maxStr(char *s1 ,char *s2,int num1,int num2);
int main(int argc, const char * argv[])
{
// 定义2个字符串
char str1[1024],str2[1024];
while (1) {
printf("请输入第一个子串:\n");
gets(str1);
int len1 = strlen(str1); // 获取字符串str1的长度
printf("请输入第二个子串:\n");
gets(str2);
int len2 = strlen(str2); // 获取字符串str2的长度
maxStr(str1, str2, len1, len2);
getchar();
}
return 0;
}
// 获取最大公共字符串,字符串s1长度num1,字符串s2长度num2
void maxStr(char *s1 ,char *s2,int num1,int num2)
{
int index = 0; // 字符相同时,字符串s1的初始下标
int n1; // 每个公共子串的长度
int n2 = 0; // 公共子串的初始长度
// 循环遍历2个字符串
for (int i = 0; i<num1; i++)
{
for (int j = 0; j< num2; j++)
{
if (s1
== s2[j] && s1
!='\0') // 当字符相同时,给定子串长度为1
{
n1 = 1;
// 循环判断相同字符数
for (int k = 1; s1[i+k]==s2[j+k] && s1[i+k]!='\0'; k++)
{
n1++;
}
// 找到最长子串时,设置下标index
if (n1>n2)
{
index = i;
n2 = n1 ;
}
j+=n1-1;
}
}
}
if (n2!=0)
{
printf("最大公共子串:\n");
for (int i = 0; i<n2; i++) {
printf("%c",s1[index+i]); //1改成i就好了
}
}
else
{
printf("没有公共子串!\n");
}
}
作者:
兰闻天
时间:
2014-4-28 12:18
貌似基础考试的题都一样
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2