Почему не работают цифры?
Программа должна определять палиндромы (слова с симметричным расположением символов) и выводить их на экран. Со словами всё хорошо, и работает это вроде как корректно, по крайней мере багов я не обнаружил. Но с цифрами другая история - программа не видит, что введенное число является палиндромом.
В чём моя ошибка и как это исправить?
#include <stdio.h>
#define N 256
int main() {
int i = 0;
char str[N];
char word[N];
int count_p = 0;
while (((str[i] = getchar()) != '\n') && (i < N))
i++;
str[N - 1] = '\0';
int j = 0, s = 0;
for (int i = 0; i < N; i++) {
if (str[i] != ' ') {
s++;
word[j] = str[i];
j++;
}
else {
int sum = 0;
for (int i = 1; i <= s; i++)
if (word[i - 1] == word[s - i]) sum++;
if (sum == s) {
for (int i = 0; i < sum; i++)
printf("%c", word[i]);
count_p++;
}
printf(" ");
s = 0;
j = 0;
}
}
printf("Was palindrome: %d.", count_p);
return 0;
}
Ответы (1 шт):
У вас очень странная логика, так что ее надо или существенно переписывать, или это будет выглядеть как на автомобиле привязанная шнурочком деталь. Вот два шнурочка.
У вас строка завершается нулевым символом очень далеко (N-1), а надо бы после введенной строки. Можно дописать это обнуление, а можно шнурочек — просто занулять сразу весь массив перед работой:
char str[N] = {0};.Ваша логика завязана на то, что слово заканчивается пробелом (кстати, дело у вас не в цифрах... введите просто один палиндром — он не будет пойман с большой вероятностью. Введите число среди других — поймает) — поэтому вот второй шнурочек — после цикла
whileдописатьstr[i] = ' ';.
Попробуйте.
P.S. И к чему у вас в вопросе метка случайные-числа? или хотя бы просто числа? Ими тут и не пахнет. Вы даже введенное число рассматриваете как строку, а не как число...