没有对称字符返回0,所谓对称字符串是指如“abccba”或abcdcba,即对于长度为n的字符串,第i个字符与第n-i+1个字符均相同。例如,ab121121b,最长对称字符串是b121121b,长度为8
各位大神速度啊,你秒答,我秒采纳。。
c语言计算给定字符串包含的最长对称字符串的长度
答案:4 悬赏:50 手机版
解决时间 2021-03-19 08:03
- 提问者网友:人傍凄凉立暮秋
- 2021-03-18 23:31
最佳答案
- 五星知识达人网友:春色三分
- 2021-03-19 00:34
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int test(char * str)
{
char *p = str;
char *q;
char *k;
int *tmp;
int num = 0;
//找一个字符存储一个字符
tmp = (int *)calloc(strlen(str),sizeof(int));
//每个字符都查找一遍
while(*p!='\0')
{
//从被查找的字符*p后面开始查找
q = p + 1;
//清0一下计数
num = 0;
while(*q!='\0')
{
//q开始查找*p
//并注意后面是不是还有等于*p的字符
//例如12313212
//最长字符串应该是1231231
if((k=strchr(q,*p))!=NULL)
{
//增加计数
num =k - q +2 ;
//再次查找
q = k + 1;
}else
{
break;
}
}
//保存找到的最长的字符数
tmp[p-str] = num;
//继续找一下一个
p++;
}
num = 0;
//找到最大的计数
for(int i = 0;i<strlen(str);i++)
{
if(num < tmp[i])
num = tmp[i];
}
free(tmp);
return num;
}
int main()
{
printf("[%d]\n",test("881291344513334123"));
return 0;
}
#include<string.h>
#include<stdlib.h>
int test(char * str)
{
char *p = str;
char *q;
char *k;
int *tmp;
int num = 0;
//找一个字符存储一个字符
tmp = (int *)calloc(strlen(str),sizeof(int));
//每个字符都查找一遍
while(*p!='\0')
{
//从被查找的字符*p后面开始查找
q = p + 1;
//清0一下计数
num = 0;
while(*q!='\0')
{
//q开始查找*p
//并注意后面是不是还有等于*p的字符
//例如12313212
//最长字符串应该是1231231
if((k=strchr(q,*p))!=NULL)
{
//增加计数
num =k - q +2 ;
//再次查找
q = k + 1;
}else
{
break;
}
}
//保存找到的最长的字符数
tmp[p-str] = num;
//继续找一下一个
p++;
}
num = 0;
//找到最大的计数
for(int i = 0;i<strlen(str);i++)
{
if(num < tmp[i])
num = tmp[i];
}
free(tmp);
return num;
}
int main()
{
printf("[%d]\n",test("881291344513334123"));
return 0;
}
全部回答
- 1楼网友:渊鱼
- 2021-03-19 02:19
都是8
- 2楼网友:山君与见山
- 2021-03-19 01:58
字符串的长度起决于定义数组的长度,如a[655532],所以从某种意义上说只要内存大是无穷的,但是现实生活中,人们注重的是数组中的字符实际所占的长度,可以用strlen(a)求出它的长度。
- 3楼网友:独行浪子会拥风
- 2021-03-19 01:06
#include "stdio.h"
#include "string.h"
int main(void)
{
char c[100],tmpc[100];
int len,i,j,k=0,max=0;
scanf("%s",c);
len=strlen(c);
for(i=0;i<len;i++)//将字符串中的所有子串用huihuan函数验证一遍,虽然比较笨,但好理解
{
k=0;
for(j=i;j<len;j++)
{
tmpc[k]=c[j];
tmpc[++k]=0;
if(huihuan(tmpc))
{
if(k>max)max=k;//如果当前回环串的长度大于最长回环串长度,修改max
}
}
}
printf("%d",max==1?0:max);//为1也表示没有,改为题目中要求的0
return 0;
}
int huihuan(char *c)//验证一个字符串是否为回环串的函数
{
int len=strlen(c),i;
if(!len)return 0;
for(i=0;i<len/2;i++)
{
if(!(c[i]==c[len-1-i]))return 0;
}
return 1;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯