2025年字符串s中包含若干个回文字符子串,找出其中所有长度大于2的回文字符,然后按其长度的降序存放在字符串数组str中,若某个回文字符串已经存在str中,则丢弃。

字符串s中包含若干个回文字符子串,找出其中所有长度大于2的回文字符,然后按其长度的降序存放在字符串数组str中,若某个回文字符串已经存在str中,则丢弃。题目 字符串 s 中包含若干个回文字符子串 找出其中所有长度大于 2 的回文字符 然后按其长度的降序存 放在字符串数组 str 中 若某个回文字符串已经存在 str 中 则丢弃 例如 字符串 s 为 ILoLoL jiangsu151uh 其中 回文子串有

大家好,我是讯享网,很高兴认识大家。


讯享网

题目:字符串s中包含若干个回文字符子串,找出其中所有长度大于2的回文字符,然后按其长度的降序存 放在字符串数组str中,若某个回文字符串已经存在str中,则丢弃。


例如:字符串s为:“ILoLoL.jiangsu151uhj”:
其中,回文子串有:“LoLoL”,“LoL”,“oLo”,“LoL”,“u151u”,“151”
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
编写程序:
1.编写函数int GenStr(int start,char s[ ] ,char str[ ] [ N ] ),从串s的str下标至最后一个字符之间查找回文字符串,若找到则保存到字符串数组str中,函数返回找到的回文字符串的个数。
2.编写函数void InsertStr(char str[ ][N],char step [ ][N],int n),将s的n个字符串按其长度的降序插入到字符串str中,如果插入的字符串已存在,则不插入。

 #include <stdio.h>  #include <string.h>  #include <stdlib.h> #include <math.h> #include <ctype.h> #define N 255 #define M 100 int GenStr(int start,char s[ ] ,char str[ ] [ N ] ) { 
    int i,j,k,m; static p=0; j=strlen(s)-1; i=start; while(j-i>1) { 
    while(i<j) if(s[i]!=s[j])j--; else break; } if(i!=j) { 
    k=1;m=j; while(i<=j) if(s[i]==s[j]) { 
    k=0;break; } else { 
    i++;j--; } if(k) { 
    j=0; for(i=start;i<=m;i++) str[p][j++]=s[i]; str[p++][j]=0; j=m;i=start;j--; } } } return p; } void InsertStr(char str[ ]IN], char step[ ]IN], int n) { 
    int i,j,k,m=0,c; for(i=0;i<n;i++) { 
    k=1; for(j=0;j<m;j++) if(strcmp(step[i],str[j])==0) { 
    k=0;break; } if(k) { 
    c=m-1; while(c>=0&&strlen(step[i])>strlen(str[c])) { 
    strcpy(str[c+1], str[c]); } } c--; strcpy(str[c+1], step[i]); m++; } } } int main( ) { 
    FILE *fp; int i, n; char s[N]="ILoLoL.jiangsu151uhj"; fp=fopen("DATA.dat" ,"w"); if( fp==NULL) { 
    printf("Write File Error"); exit(0); } for (i=0; i<strlen(s)-2; i++) { 
    n=GenStr(i,s, step); InsertStr(str,step,n); } printf("长度大于2的回文字符串有: \n"); for(i=0; str[i][0]; i++) { 
    puts(str[i]); fputs(str[i],fp); } fclose(fp); return 0; } 

讯享网
小讯
上一篇 2025-01-25 16:31
下一篇 2025-03-09 12:09

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/11020.html