Перед проверкой палиндрома необходимо удалить пробелы и знаки препинания. Например, если вы используете civic?
, это не палиндром из-за ?
. С другой стороны, если вы используете civ ic
, это не палиндром из-за пробелов. Там для
- Преобразование всех букв в верхний или нижний регистр.
- Удалить пробелы.
- удалить знаки препинания.
- Проверить палиндром или нет.
Вы можете сделать это, используя # include <string.h>
- Прежде всего, вы должны использовать
scanf()
, которые принимают строка с пробелом.
printf("Enter a string = ");
scanf("%[^\n]%*c", word);
Затем вам нужно преобразовать эту строку в верхний или нижний регистр, потому что a != A
. Мы знаем, что civic
является палиндромом, но Civic
не является палиндромом ('Civi c! = Civi C), поскольку заглавные буквы имеют разные значения ASCII, а строчные буквы имеют разные значения ASCII.
(a - z) -: 97 - 122
(A - Z) -: 65 - 90
В моем случае я перевел строчные буквы в прописные.
while(strlen(word) >= i)
{
if(word[i] >= 97 && word[i] <= 122)
{
word[i] = word[i] - 32;
}
i++;
}
Другой случай - ваш, если вы введете
civ ic
с пробелом, его палиндромное слово будет
ci vic
. Вы можете увидеть
civ ic != ci vic
. Там вы должны удалить пробелы в вашей программе. А также вы должны удалить знаки препинания, потому что если вы используете
civic,
, то обратное слово будет
,civic'. You can see
civi c,! =, Civic`.
int len = strlen(word);
while(a < len)
{
for(i = 0; i < len; i++)
{
if(word[i] == ' ' || !(word[i] >= 'A' && word[i] <= 'Z'))
{
for(j = i; j < len; j++)
{
word[j] = word[j+1];
}
len--;
}
}
a++;
}
Наконец, мы должны обратить нашу строку и должны проверить, равна ли наша обратная строка нашей исходной строке. Если это правда, наша строка - палиндром. Если оно ложно, наша строка не является палиндромом.
for(i = 0; i < len; i++)
{
if(word[i] == word[len - 1])
{
len--;
}
else
{
printf("%s is not a palindrome\n", word);
return 0;
}
}
printf("%s is a palindroeme\n", word);
Это полный код после объединения вышеуказанных частей
# include <stdio.h>
# include <string.h>
int main (void)
{
char word[100];
int i = 0;
int j, x = 0;
int a = 0;
printf("Enter a string = ");
scanf("%[^\n]%*c", word);
while(strlen(word) >= i)
{
if(word[i] >= 97 && word[i] <= 122)
{
word[i] = word[i] - 32;
}
i++;
}
printf("After converting it to uppercase = %s\n", word);
int len = strlen(word);
while(a < len)
{
for(i = 0; i < len; i++)
{
if(word[i] == ' ' || !(word[i] >= 'A' && word[i] <= 'Z'))
{
for(j = i; j < len; j++)
{
word[j] = word[j+1];
}
len--;
}
}
a++;
}
printf("After removing spaces = %s\n", word);
for(i = 0; i < len; i++)
{
if(word[i] == word[len - 1])
{
len--;
}
else
{
printf("%s is not a palindrome\n", word);
return 0;
}
}
printf("%s is a palindroeme\n", word);
return 0;
}
Первый тест Вывод -:
Enter a string = He lived as a devil, eh?
After converting it to uppercase = HE LIVED AS A DEVIL, EH?
After removing spaces = HELIVEDASADEVILEH
HELIVEDASADEVILEH is a palindroeme
Второй тестовый вывод -:
Enter a string = Madam I am Adam.
After converting it to uppercase = MADAM I AM ADAM.
After removing spaces = MADAMIAMADAM
MADAMIAMADAM is not a palindrome