gpt4 book ai didi

c - 使用C查找字符串中所有可能的回文

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:10 25 4
gpt4 key购买 nike

我编写了一个程序来查找字符串中所有可能的回文。代码如下

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
clrscr();
char *ptr1;
char str[100];
printf("enter the string with even length\n");
gets(str);
int n;
int i=strlen(str);
if(i%2==0)
{
for(int n=0;n<=strlen(str);n++)
{
for(int k=1;k<=strlen(str);k++)
{
int m=0;
int j=0;
ptr1=str;
while(*ptr1!='\0')
{
ptr1+;
j++;
m++;
}
j=j-k;
for(i=n;i<m/2;i++,j--)
{
if(str[i]!=str[j])
{
break;
}
}
if(j<=i)
printf("String is a palindrome\n");
else
printf("String is not a palindrome\n");
}
}
}
else
{
printf("String is of odd length");
}
getch();
}

但是我得到的打印语句的数量超过了它需要显示的数量。任何人都可以帮我解决代码并告诉我哪里出了问题。

最佳答案

我不确定是否有一种简单的方法可以在字符串中找到“所有可能的”回文。需要考虑几个因素和假设:

(1) 我们要烧烤的每个子串的最小和最大长度。否则,每一个字符本身就是一个回文!最大值当然是小于字符串长度的数字(一个?)

(2) 在我们选择一个子串之前,我们是否应该坚持字符的原始排列(根据给定的输入)?或者,程序是否应该首先自行生成可能的排列,然后检查由此获得的字符串。

(3) 更复杂一点,如果一个输入字符出现两次(或更多),那么至少会有两个(或更多)字符排列相似的子串。这将需要额外的逻辑来抑制重复...(字符串数组)

我强烈认为上面叙述的内容对于您可能拥有的“实际”要求来说应该是多余的。然而,回到检查回文的问题的根源,认为双指针方法可能是一种简单且资源较少的解决方案。例如(用静态输入说明):

char str[10] = "rotator";
int str_length = strlen(str);
int palindrome_flag = 1;
char *ptr1 = str;
char *ptr2 = ptr1 + str_length - 1;

while(ptr1 <= ptr2){
if(*ptr1 != *ptr2){
palindrome_flag = 0;
break;
}

ptr1++;
ptr2--;
}

if(palindrome_flag){
printf("\n String \"%s\" is a palindrome", str);
}
else{
printf("\n String \"%s\" is not a palindrome", str);
}

return 0;

希望这有帮助吗?谢谢。

关于c - 使用C查找字符串中所有可能的回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com