Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2017, 17:32   #1
Andr0meda
Новичок
Джуниор
 
Регистрация: 19.12.2017
Сообщений: 1
Сообщение Работа со строками. Превернуть слова в строке и удалить слова-палиндромы (С)

Здравствуйте! Возникла проблема при написании программы к задаче(условие, собственно, в заголовке).

По сути, как я понимаю, нам достаточно создать 2 char'овских массива: один с заданной строкой, второй - пустой, туда мы будем записывать вычлененные из "главной" строки. После чего просто проверять поочередно слова во втором символьном массиве на их палиндромность и, если слово палиндромом не является просто вывести его на экран задом-наперед.

Мой код. На данный момент программа дальше 5 элемента массива не выводит ничего дельного.
Буду очень благодарен за помощь, спасибо.

Код:
bool check_palindrom (char *string) { // проверка слова на палиндромность 
    int length = sizeof(string);
    for (int i = 0; i < length / 2; ++i)
    {
        if (string[i] != string[length - i - 1])
        {
            return false;
        }
    }
    return true;
}
 
int main() {
    char str[] = "Baba Galia radar Yur";                        // сама строка
    char *str2;                                     // строка, куда будут записываться слова из первой строки
    int len = sizeof(str) - 1;                              // длина строки без \0
    int counter = 0;                                        // счетчик, отвечает за длину слова.
    for (int i = 0; i <= len; i++) {                            // цикл бежит от начала строки до конца
        counter++;                                  // увеличиваем счетчик, чтобы знать когда кончается слово 
        if (str[i] == ' ') {                                // если встречается пробел, то:
            counter--;                                                          // уменьшаем его на 1, чтобы в str2 не записывался прробел, а только слово
            str2 = (char*)malloc(counter * sizeof(int));            
            for (int j = 0; j <= counter; j++) {                // от начала до конца слова присваем это слово из строки в массив для работы со словами
                str2[j] = str[j];
            }
            if (check_palindrom(str2) != true) {                // проверяем слово в str2 на палиндромность, если слово полиндромом не является - выводим его на экраз задом-наперед
                for (counter; counter >= 0; counter--) {
                    printf("%c", str2[counter]);
                }
                printf(" ");
            }
            counter = 0;                                                        
        }
    }
    return 0;
}
Andr0meda вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти в строке все слова- палиндромы(перевертыши) паскаль tdsotm Помощь студентам 1 14.12.2014 17:46
Найти в строке все слова - палиндромы(перевертыши) tdsotm Помощь студентам 5 17.11.2014 23:35
Удалить все слова до последнего пробела в строке Teror4uks Общие вопросы Delphi 2 16.04.2014 10:48
Символьная строка содержит слова, разделенные пробелами. Найти все слова-палиндромы (Паскаль) sashunechka Помощь студентам 4 18.05.2011 21:45
удалить повторяющиеся слова в строке Андрей.12 Помощь студентам 0 15.12.2009 18:51