Найти все возможные палиндромы в строке, используя C

Вопрос: Я написал программу, чтобы найти все возможные палиндромы в строке. Код ниже #include #include #include void main() { clrscr(); char *ptr1; char str[100]; printf("enter the string with even lengthn"); gets(str); int n; int i=strlen(str); if(i%2==0) { for(int n=0;n

Вопрос:

Я написал программу, чтобы найти все возможные палиндромы в строке. Код ниже

#include<stdio.h> #include<conio.h> #include<string.h> void main() { clrscr(); char *ptr1; char str[100]; printf(«enter the string with even lengthn»); 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!=’’) { 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 palindromen»); else printf(«String is not a palindromen»); } } } 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;

Надеюсь это поможет? Спасибо.

Оцените статью
Добавить комментарий