Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/166: Рейтинг темы: голосов - 166, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 24.04.2017
Сообщений: 37

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

24.11.2017, 02:17. Показов 34773. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, есть такая задача нужно сделать метод проверяющий слова на палиндром.
Условия такие:
- Можно использовать указатели.
- Нельзя использовать массивы(Arrays), библиотечные функции для массивов и стрингов (например сo string.h)
- Мы должны динамически распределять память, используя библиотечную функцию malloc() и в конце освободить функцией free()
- нужно написать функцию вида int palindrom(char *t)

Вот код без выполнения условий.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "stdafx.h"
#include < string.h > 
 
int palindrom(char s[])
{
    int l, i;
    l = strlen(s);
    for (i =0;i<l/2;i++)
    {
        if (s[i]!=s[l-1-i])
            return(0);
    }
    return(1);
}
void main()
{
    char str[20];
    printf("Enter a word ");
    gets_s(str);
    if (palindrom(str))
        printf("Success");
    else
        printf("Not a palidrome");
 
    gets_s(str);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2017, 02:17
Ответы с готовыми решениями:

Рекурсивная проверка на палиндром
Ребят посмотрите свежим взглядом программку. Она проверяет являетс ли слово полиндромом. Пока что, эта программка судя по шаговому...

Проверка строки на палиндром
Вообщем парни, я на С++ делал, но преподу надо в С эту задачу, на С++ я так и не доделал, не могу додумать и сделать в обычном С, помогите...

Сделать из введенного слова палиндром
НУжно: написать написать в си программу, которая делает из вводимого слова палиндром. Например ввели (мама) после выполнения программы...

11
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
24.11.2017, 11:28
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
 
int palindrom(const char *s)
{
    const char *end = s;
    while (*end) end++; // ищем конец строки (нулевой байт)
    end--; // отступаем назад на один байт (от нулевого)
 
    for (; s < end; s++, end--) {
        if (*s != *end)
            return 0;
    }
 
    return 1;
}
 
int main()
{
    char *s = malloc(100);
 
    if (!s) {
        puts("Не удалось выделить 100 байт? Серьёзно?");
        return 1;
    }
 
    printf("Enter string: ");
    gets(s);
 
    if (palindrom(s))
        puts("Pal");
    else
        puts("Not pal");
 
    free(s);
}
1
0 / 0 / 0
Регистрация: 24.04.2017
Сообщений: 37
24.11.2017, 14:32  [ТС]
Немного доделал. А как сделать, чтобы слово содержало не более 50 знаков
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
 
int palindrom(const char *s)
{
    const char *end = s;
    while (*end) end++; // find the end of string
    end--; // we retreat back one byte (from zero)
 
    for (; s < end; s++, end--) {
        if (*s != *end)
            return 0;
    }
 
    return 1;
}
 
int main()
{
    char *s = malloc(100);
 
    if (!s) {
        puts("Could not allocate 100 bytes");
        return 1;
    }
while (1)
{
   printf("Enter string: ");
    gets(s);
    if (palindrom(s))
        printf("Palindrom: %s \n", s);
    else
        puts(s);
 
}
    free(s);
}
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
24.11.2017, 14:40
Ограничение длины слова:
C
1
scanf("%50s", s); // не более 50 символов
0
0 / 0 / 0
Регистрация: 24.04.2017
Сообщений: 37
24.11.2017, 16:06  [ТС]
А как его вставить в условие цикла ? оно разделает текст на части
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
24.11.2017, 16:14
Цитата Сообщение от leoniduak Посмотреть сообщение
А как его вставить в условие цикла ?
Не совсем понял вопрос, при чём здесь условие цикла. Видимо, вам просто нужно заменить gets на scanf.
0
0 / 0 / 0
Регистрация: 24.04.2017
Сообщений: 37
24.11.2017, 16:31  [ТС]
При замене gets на scanf("%5s", s);
При вводе текста testing выдает:

testi
Enter string: ng
Enter string:

вместо
testi
Enter string:
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
24.11.2017, 16:56
Тогда можно объединить gets и scanf:
C
1
2
3
4
5
6
7
8
9
10
11
    while (1)
    {
        printf("Enter string: ");
        gets(buf);
        sscanf(buf, "%5s", word);
        if (palindrom(word))
            printf("Palindrom: %s \n", word);
        else
            puts(word);
 
    }
0
0 / 0 / 0
Регистрация: 24.04.2017
Сообщений: 37
24.11.2017, 17:15  [ТС]
так вообще не работает
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
24.11.2017, 17:25
Выкладывайте всю программу. У меня работает.
0
0 / 0 / 0
Регистрация: 24.04.2017
Сообщений: 37
25.11.2017, 01:58  [ТС]
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdlib.h>
 
int palindrom(const char *s)
{
    const char *end = s;
    while (*end) end++; // find the end of string
    end--; // we retreat back one byte (from zero)
 
    for (; s < end; s++, end--) {
        if (*s != *end)
            return 0;
    }
 
    return 1;
}
 
int main()
{
    char *s = malloc(100);
    char *buf;
 
 
    if (!s) {
        puts("Could not allocate 100 bytes");
        return 1;
    }
 while (1)
    {
        printf("Enter string: ");
        gets(buf);
        scanf(buf, "%5s", s);
        if (palindrom(s))
            printf("Palindrom: %s \n", s);
        else
            puts(s);
 
    }
    free(s);
}
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
25.11.2017, 03:00
Под buf тоже нужно выделить память:
C
1
char *buf = malloc(100);
Вместо scanf должно быть sscanf (это не опечатка, просто это две разные функции). scanf берёт данные из stdin, а sscanf из строки, заданной первым параметром.
C
1
sscanf(buf, "%5s", s);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.11.2017, 03:00
Помогаю со студенческими работами здесь

Найти все слова, которые представляют собой слово-палиндром
Данго предожение, в котором слова разделенеы запятой или пробелом, а общяя длина меньше либо равна 80. Найти и напечатать все слова,...

Проверка слова на палиндром
Какой будет код для проверки слова на палиндром? очень срочно Например вводим слово казак и нам выдаёт это слово является палиндром ...

Удалить слова, из которых перестановкой букв можно получить палиндром, и продублировать остальные слова
Задание такое: удалить слова, из которых перестановкой букв можно получить палиндром, и продублировать остальные слова. Заранее...

Проверка на палиндром
Проверить, является ли 5-тизначное число палиндромом. (Число водится с клавиатуры).

Проверка на палиндром
Всем доброго времени суток. Пишу с просьбой помочь решить задачу.Нужно введенное с клавиатуры слово проверить является оно палиндромом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru