Мне нравится твое отношение.
Во-первых, здесь вы пытаетесь вложить два логических утверждения, которые по сути являются одним. Вы также используете неправильные функции для определения типа символа:
если isspace(word[i])
, то вы можете гарантировать, что !isalpha(word[i])
. Оба утверждения всегда будут истинными или ложными одновременно, поэтому одно из них является избыточным. Что вы на самом деле делаете, это только нажимаете символы, если они буквенно-цифровые, верно? Поэтому вместо того, чтобы использовать оператор if, чтобы определить, хотите ли вы пропустить символ, вы должны делать оператор if, чтобы определить, хотите ли вы нажать символ. Я думаю, что isalnum()
может быть тем, что вы хотите.
Во-вторых, вместо того, чтобы выполнять strlen (), который выполняет итерацию по строке, и использовать возвращаемое значение для итерации по строке (то есть дважды), попробуйте:
while('\0' != word[i])
или даже лучше:
for(i = 0; '\0' != word[i]; i++)
Наконец, ваш тест на палиндром может быть немного улучшен. Тестирование значения цикла после цикла работает во всех случаях, но немного уродливо. Это также не терпит дураков с радостью. В профессиональной среде многие люди, некоторые не очень добросовестные, редактируют код и используют значения цикла после цикла, что может быть рискованно. Возможно, вместо этого вызовите bool, называемый чем-то вроде «match», и инициализируйте его как true, затем выполните цикл до конца стека или «match», чтобы установить «false» и установить «match» в false, если символ в стеке не «соответствует» ожидаемое значение. Это также будет более эффективным.
Я был в процессе составления этого ответа, когда исходный вопрос, очевидно, был удален.
Если вы хотите, чтобы я опубликовал пример кода, я с удовольствием это сделаю, но я думаю, что вы могли бы узнать больше, если я этого не сделаю. Если вам нужен пример кода или вы хотите, чтобы я посмотрел на то, что вы придумали после этого ответа, не стесняйтесь.