请教高人一个C的最大公子串的编程问题

#include<iostream.h>#include<string.h>intmaxlen=0;char**r1,**r2;chara[]="abcd",b[]="a... #include<iostream.h>
#include<string.h>
int maxlen = 0;
char **r1, **r2;
char a[]="abcd",b[]="abc";
//r1=new char;
//r2=new char;
void GetCommon( char *s1, char *s2)
{

int len1 = strlen(s1);
int len2 = strlen(s2);

for(int i = 0; i < len1; i++)
{
for(int j = 0; j < len2; j++)
{
if(s1[i] == s2[j])
{
int as = i,bs = j, count = 1;
while(as + 1 < len1 && bs + 1 < len2 && s1[++as] == s2[++bs])
count++;
if(count > maxlen)
{ // s1=a;
//s2=b;
maxlen = count;
*r1 = s1 + i;
*r2 = s2+ j;
}
}
}
}
//return *r1;
}
main()
{
// char *a="abcdef", *b="defghi";
// char **c,**d;
// char *c;

GetCommon(a,b);
for(int i=0;i<maxlen;i++)
cout<<*r1[i]<<endl;
}

弄了很久很久 试了很多很多 就是在
*r1 = s1 + i;
*r2 = s2+ j;
一直出现 access violation 不知道怎么解决
展开
 我来答
horzel
2008-12-15 · TA获得超过106个赞
知道小有建树答主
回答量:99
采纳率:0%
帮助的人:116万
展开全部
你的程序基本没什么问题,不过要注意代码规范,声明都要放在最开始,我用c跟你调试了一下,不知道对你有没有用。程序输出为def。其中**r1和**r2改为*r1和*r2要更好一些,二重指针这里基本用不上的。
#include <string.h>
#include <stdio.h>

int maxlen = 0;
char **r1, **r2;
char a[]="abcd",b[]="abc";

void GetCommon( char *s1, char *s2)
{
int i,j,as,bs,count;
int len1 = strlen(s1);
int len2 = strlen(s2);

for(i = 0; i < len1; i++)
{
for(j = 0; j < len2; j++)
{
if(s1[i] == s2[j])
{
as = i;
bs = j;
count = 1;
while(as + 1 < len1 && bs + 1 < len2 && s1[++as] == s2[++bs])
count++;
if(count > maxlen)
{
/*s1=a;s2=b;*/
maxlen = count;
*r1 = s1 + i;
*r2 = s2+ j;
}
}
}
}
/*return *r1;*/
}

main()
{
char *a="abcdef", *b="defghi";
/*char **c,**d;
char *c;*/
int i;
GetCommon(a,b);
for(i=0;i<maxlen;i++)
printf("%c",*(*r1+i));
getch();
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式