黑马程序员技术交流社区
标题:
取出最大公有子字符串老是出错,求指教
[打印本页]
作者:
Edware
时间:
2015-8-16 13:34
标题:
取出最大公有子字符串老是出错,求指教
int main(int argc, const char * argv[]) {
//1>定义并初始化俩个字符串
2>再定义一个字符串用来作为这俩个字符串的公有子字符串
3>取出长度小的字符串逐个和另外一个字符串的字符比较
4>相等赋值给公有子字符串直到长度小的字符串字符为’\0’,并赋值给公有子字符串结束。
char *str1 ="nbitheimanb";
char *str2 = "ithei";
char *str3 = "gjghj";
for (int i = 0; i < sizeof(str2); i++) {
for (int j = 0; j < sizeof(str1); j++) {
if(*(str1+j) == *(str2+i) && (*(str2+i)!='\0'))
{
*(str3++) = *(str2+i);//此处提示出现访问坏的地址,不明白
}
}
}
*str3 = '\0';
printf("str3 = %s\n",str3);
return 0;
}
作者:
Edware
时间:
2015-8-16 13:36
各位大神求帮忙
作者:
960743995
时间:
2015-8-16 14:20
应该不用sizeof,而用strlen,因为str1,str2都是指针,都是8个字节。
作者:
Edware
时间:
2015-8-16 22:06
960743995 发表于 2015-8-16 14:20
应该不用sizeof,而用strlen,因为str1,str2都是指针,都是8个字节。
恩,我看看
作者:
wg592930
时间:
2015-8-17 11:48
共同学习
#include <stdio.h>
#include <string.h>
//定义一个函数,功能是获取两个字符串的最大公共子字符串
//形参分别为字符型指针变量str1、str2和整型常量 num1、num2
int getMaxSonStr(char *s1, char *s2, int len1, int len2)
{
//index表示出现第一个相同字符时str1中对应字符的下标
int index = 0;
//m 表示公共子串初始长度是0, n表示每个公共子串的长度
int m = 0, n = 0;
//遍历s1
for (int i = 0; i < len1; i++)
{
//遍历s2
for (int j = 0; j < len2; j++)
{
//遇到相同字符时
//s1[i] != '\0'可以防止越界
if (s1[i] ==s2[j] && s1[i] != '\0')
{
//子串长度为1
m = 1;
//s1[i+k]!='\0',结束符相等不比较,预防越界
for (int k = 0; s1[i+k] == s2[j+k] && s1[i+k]!='\0'; k++)
{
//没多一个相同字符,子串长度自增+1
m++;
}
//假定n为最长的子串的长度
if(m > n)
{
//记录最长子串的起始下标
index = i;
//将最长子串的长度值赋值给最大公共子串长度
n = m;
}
}
}
}
//当存在子串时候,输出最大的
if(m !=0)
{
printf("最长的公共子串:");
for(int i = 0; i < m; i++)
{
printf("%c",s1[index+i]);
}
}
//不存在子串输出没有
else
printf("没有公共子串!\n");
return 0;
}
int main(int argc, const char * agv[])
{
//定义两个字符串str1和str2,并对其进行初始化
char str1[110];
char str2[110];
//提示用户输入第一个字符串
printf("请输入第一个字符串:\n");
//接收用户输入的字符串
gets(str1);
//提示用户输入第二个字符串
printf("请输入第二个字符串:\n");
//接收用户输入的字符串
gets(str2);
//计算输入字符串str1的长度
int len_str1 = strlen("str1");
//计算输入字符串str2的长度
int len_str2 = strlen("str2");
//调用函数,获取两个字符串的最大公共子字符串
getMaxSonStr(str1,str2,len_str1,len_str2);
printf("\n");
return 0;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2