Я бы вам посоветовал переписать это в несколько функций — одна разбивает строку на слова, другая проверяет палиндромность слова, и уже в маленьких функциях разбираться с типами. Если всё собирать в одну громадную функцию, то не только за типами, за смыслом не уследишь! Потому функции в языках программирования и появились, а потом — всякие варианты ООП и прочие штуки.
При этом совершенно необязательно выделенные слова хранить как строки — можно хранить индексы начала и конца, или индекс начала и длину, или индекс начала и 1 + индекс конца (у этого есть некоторые преимущества перед обоими предыдущими способами). Потом такой массив прозрачно обрабатывается в цикле. Можно обойтись и без массива, сделав функцию с названием типа
getNextWordInfo, которая будет возвращать индексы для следующего слова и количество пробелов, которые нужно после него вывести (чтобы не считать символы вне её и не загромождать код), а когда слова кончатся, она будет возвращать что-то явно определяющее конец итерациям.
Для этого надо будет знать про структуры. Это несложно, а код был бы, по моему субъективному мнению, намного понятнее, в него не нужно было бы вчитываться и искать, всё ли там гладко состыковано. А сейчас читать код нет желания.
-- Чт окт 03, 2013 00:01:40 --P. S. Такие простыни кода на известных языках лучше засовывать не в теги
code, а в теги
syntax. Для этого в поле набора сообщения есть список «Выберите язык», при выборе языка (
) в котором соответствующий текст вставляется в сообщение автоматически.
Пример:
int main(void)
{
return 1; // о нет!
}