Как выйти из кода, если ничего не введено? Пример кода: Проверьте, является ли строка палиндромом или нет? (на языке программирования C) - PullRequest
0 голосов
/ 13 мая 2019

ВОПРОС: Как выйти из кода, если в STDIN (консоль) ничего не введено?

Например:

* Ввод"NULL - NOTHING - ZERO":)

Ожидаемый вывод (Закрыть цикл выхода из программы) *


Ввод:

Hello

Вывод:

Привет не палиндром


Ввод:

Отто

Вывод:

Отто - это палиндром


Код Описание: Палиндром - это строковая фраза, которая читает как вперед, так и назад.Примерами палиндромов являются «ABCDCBA», «otto», «i am ma i», «C».Напишите программу, которая читает строку текста и печатает, является ли эта строка текста палиндромом.

#include <stdio.h>
#include <string.h>

#define MAXLEN 100

void reverseString(char *str, char *reversedStr)
{
    int i;

    for (i=strlen(str)-1; i>=0; i--)
    {
        *reversedStr++ = *(str+i);
    }
    *reversedStr = '\0';
}


int main(int argc, char **argv) {
    char str[MAXLEN];
    char reversedStr[MAXLEN];

    while (fgets(str, sizeof(str)-1, stdin) != NULL)
    {
        str[strlen(str)-1] = '\0'; // the last character is the newline. Replace with null
        reverseString(str, reversedStr);
        if (strcmp(str, reversedStr) == 0)
            printf("%s is a palindrome\n", str);
        else {
            printf("%s is not a palindrome\n", str);
        }
    }

    return 0;
}

Фрагмент кода: https://onlinegdb.com/ByGKe8LnE

1 Ответ

1 голос
/ 13 мая 2019

Ваш код работает.Просто нажмите Ctrl-D сразу после ввода (сигналы окончания ввода), чтобы выйти.

Пара других вещей:

  • fgets() не требует размера минус 1. вруководство: «fgets() считывает не более одного символа меньше размера ...»
  • действительно нет необходимости копировать / переворачивать всю строку и сравнивать, достаточно половины, ИЛИ вы можете просто сравнить началос конца до центра, без копирования.
  • strlen() "обходит" строку - вы можете использовать ее результат вместо повторного вызова.

.

#include <stdio.h>
#include <string.h>

#define MAXLEN 100

int isPalindrome(char *str, size_t len) {
    char *end = str + len - 1;
    while (end > str)
        if (*end-- != *str++) return 0;
    return 1;
}

int main(int argc, char **argv) {
    char str[MAXLEN];
    while (fgets(str, sizeof(str), stdin) != NULL) {
        size_t len = strlen(str) - 1;
        str[len] = 0; // the last character is the newline. Replace with null char
        printf("%s is %sa palindrome\n", str, isPalindrome(str, len) ? "" : "not ");
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...