Помогите с задачкой по С++

Тема в разделе "WASM.BEGINNERS", создана пользователем XbIxbI, 18 янв 2009.

  1. XbIxbI

    XbIxbI New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    1
    Задача.... В заданом тексте нужно найти все слова полиндромы(слова читаемые в ту и другую сторону одинаково. Пример: Казак, Радар)



    Вобще в этой задачке нужно сравнивать буквы слова между собой что бы понять полиндром это или нет. Вопрос только как. Либо через кодировку каждой буквы(кириллица) либо сравнивать сами символы межу собой... Подскажите пожалуйста какой способ лучше и как это удобней сделать. Кончено желательно с примерами. Заранее благодарен :)
     
  2. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    XbIxbI
    устанавливаешь указатели на начало и конец слова и сравниваешь символы, на которые они указывают, при каждой итерации приближаешь указатели друг друга, пока первый меньше второго. Меня удивляют нынешнию студенты, как такое может вызывать затруднения?
    Код (Text):
    1. int check_polindrom(char *s)
    2. {
    3.     char *start = s, *end = s + strlen(s);
    4.     while (start < end)
    5.         if (*start++ != *--end)
    6.             return 0;
    7.     return 1;
    8. }
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Да те, кто шарят, просто не будут подобное спрашивать.
     
  4. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    Немного дополню слова медузы
    Сперва все символы в слове нужно привести к одному регистру. Т.е. либо все строчные, либо все заглавные.
    Иначе пример медузы "Казак" полиндромом считать не будет.

    Если под виндоус - есть CharUpperA
    Должны быть и штатные средства С, которые я не знаю =)
     
  5. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    tolower() и toupper(). Хотя если ascii, то к нижнемы регистру можно привести через "| 0x20"
    p.s. Конечно, только латиница.
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Предварять просьбой "введите русские буквы в Windows-кодировке" а в utf8 кириллица переводится к прописным "& 0xDF", а к строчным "| 0x20"
     
  7. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Mikl___
    А можно выбирать символы из таблицы перекодировки.

    Код (Text):
    1. mov ebx,table
    2. mov esi,text
    3. mov edi,esi
    4. @@:lodsb
    5.    xlat
    6.    stosb
    7.    test al,al
    8. jne @b