64,637
社区成员
发帖
与我相关
我的任务
分享
#define BUFFSIZE 1024
void main()
{
char sz1[BUFFSIZE] = {"abractyeyt"};
char sz2[BUFFSIZE] = {"dgdsaeactyey"};
char sz3[BUFFSIZE];
char sz4[BUFFSIZE];
char ch1, ch2;
int i = 0;
int j = 0;
int k = 0;
for (i = 0; i < strlen(sz1); i++)
{
ch1 = sz1[i];
for (j = 0; j < strlen(sz2); j++)
{
if (ch1 = sz2[j])
{
for (k = 0; (k+i) < strlen(sz1) && (k+j) < strlen(sz2); k++)
{
if (sz1[i+k] == sz2[j+k]) {
sz3[k] = sz1[i+k];
}
else {
break;
}
}
}
if (strlen(sz3) > strlen(sz4))
{
strcpy(sz4, sz3);
}
strcpy(sz3, "");
}
}
printf("sz3 is %s\n", sz3);
printf("sz4 is %s\n", sz4);
char* GetSubstring(char* strSource)
{
char* strSubstring; //用于保存得到的子串,大小在找到最大子串后再确定,作为返回值
int nLen; //源字符串长度
int nCurPos; //当前统计字符串的头指针位置(相对于原字符串第一个字符的位置)
int nCurCount; //当前统计字符串的长度(有相同字符组成的子字符串)
int nPos; //当前最长的子串的头指针位置
int nCount; //当前最长的子串的长度
nLen = strlen(strSource);
//初始化变量
nCount = 1;
nPos = 0;
nCurCount = 1;
nCurPos = 0;
//遍历整个字符串
for(i = 1; i < nLen; i++)
{
if(strSource[i] == strSource[nCurPos])//如果当前字符与子串的字符相同,子串长度增1
nCurCount++;
else //如果不相同,开始统计新的子串
{
if(nCurCount > nCount)//如果当前子串比原先最长的子串长,把当前子串信息(起始位置 + 长度)保留下来
{
nCount = nCurCount;
nPos = nCurPos;
}
//长度复值为1,新串的开始位置为i
nCurCount = 1;
nCurPos = i;
}
}
//为返回的子串分配空间(长度为nCount,由于要包括字符串结束符\0,故大小要加1)
strSubstring = (char*)malloc(nCount + 1);
//复制子串(用其他函数也可以)
for(i = 0; i < nCount; i++)
strSubstring[i] = strSource[nPos + i];
strSubstring[nCount] = '\0';
return strSubstring;
}
//不太明白你的“输出”究竟是什么意思,只好给段示意性代码
main()
{
//输入一个字符串strSource
char* strSubstring = GetSubstring(strSource);
printf("最长子串为:%s\n长度为:%d",strSubstring,strlen(strSubstring));
//释放strSubstring
free(strSubstring);
}