Проверка, является ли строка палиндромом (проблема тестового примера CodeSignal) - PullRequest
1 голос
/ 31 марта 2019

Я использую CodeSignal для проверки своих возможностей кодирования, но я столкнулся с проблемой.

Сейчас я пытаюсь проверить, является ли строка палиндромом.

Я уже написал код, который должен работать, но 1 контрольный пример не проходит. Итак, 19/20 тестовые случаи работают правильно, а последний - нет (не уверен, какой из них скрыт, чтобы предотвратить жесткое кодирование).

checkPalindrome(char * inputString) {
    char temp[strlen(inputString) + 1];
    int d = 0;
    for (int i = strlen(inputString) - 1; i >= 0; i--, d++)
        temp[d] = inputString[i];
    if (strcmp(temp, inputString) == 0)
        return 1;
    else return 0;
}

Я не уверен, почему 1 тестовый пример продолжает терпеть неудачу, я протестировал большое количество строк в CodeBlocks, и они кажутся правильными.

Ответы [ 2 ]

1 голос
/ 31 марта 2019

У вас есть проблема в цикле.Если inputString пусто, strlen(inputString) имеет длину без знака 0. В случае операторов между неподписанным и подписанным возвращением без знака оба аргумента преобразуются в неподписанные.Итак, (unsigned long)0 - (int)1 равно (unsigned long)0 - (unsigned long)1, что равно 2 64 -1 (если unsigned long равно 8 байтам).

Остерегайтесь операторов между числами со знаком и без знака!

Я знаю еще худший пример:

int foo = -1;
unsigned bar = 0;

if (foo >= bar)
    cout << "-1 >= 0" << endl;
else
    cout << "-1 < 0" << endl;

Угадай, что печатает этот код.

PS: то, что написано в комментарии, тоже верно.

0 голосов
/ 31 марта 2019

Лучшим вариантом будет запуск цикла for для одной переменной вместо двух.

 checkPalindrome(char * inputString) {
 int len = strlen(inputString);
 char temp[len+1];
 temp[len] = '\0';
 for(int i = 0; i < len; i++){
    temp[i] = inputString[len-1-i];
 }
 if (strcmp(temp, inputString) == 0)
    return 1;
 else return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...