Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
infection
1 / 1 / 0
Регистрация: 11.03.2011
Сообщений: 10
#1

Слово чемпион о_О - C++

11.03.2011, 10:42. Просмотров 1091. Ответов 7
Метки нет (Все метки)

Задано некоторое предложение на неизвестном языке. Назовем слово в нем чемпионом, если оно является палиндромом и количество букв в нем максимально. Буквами алфавита в неизвестном языке являются буквы латинского алфавита и арабские цифры. Гарантируется, что других символов, кроме пробелов и знаков препинания в предложении нет.

Обьясните пожалуйста как это сделать??? А то я даж условия не понимая етого...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2011, 10:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Слово чемпион о_О (C++):

Запуск функции О_о - C++
есть функция void Account::Save (FILE *f) { int nlen = strlen (card_holder); fprintf (f, "%d %s %c%c%c %c%c/%c%c %d\r\n", sum,...

Капризный указатель О_о - C++
Создаю указатель на байт, при помощник арифметических операций +/- перемещаю его в цикле. Почему при уходе в минус ~2500 и в плюс ~1500...

Пользовательская функция О_О - C++
Ребят такое задание: необходимо вывести следующий текст на экран "Three blind mice", используя пользовательскую функцию. Ее нужно вызывать...

[c++]О_о как решить такую формулу? - C++
Как решить такую формулу? http://vimages.ru/images/wsw.gif Пробовал вот так не тот результат выдаёт. int n; double s=0; ...

Thread ссылка на удаленную функцию о_О - C++
Добрый день Начал росбираться с потоками на C++ и после 5 минут наткнулся на проблемку. Имеею клас Writing_Class ничего...

Передача указателей на файлы в функцию?О_о - C++
Добрый день! Возникла проблема при написании программы на структуры. Допустим у нас есть массив структур. Заполняем его и тд.. записываем в...

7
easybudda
Модератор
Эксперт CЭксперт С++
9694 / 5644 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
11.03.2011, 12:30 #2
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 <iostream>
#include <string>
#include <sstream>
#include <set>
    
bool poli(const std::string & str){
    int head = 0, tail = str.size() - 1;
    while ( head < tail ){
        if ( str[head] != str[tail] )
            return false;
        ++head;
        --tail;
    }
    return true;
}
 
struct LenCmp {
    bool operator() (const std::string & a, const std::string & b ){
        return a.size() > b.size();
    }
};
 
int main(){
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() ){
        std::istringstream ist(str);
        std::set <std::string, LenCmp> set;
        while ( ist >> str )
            if ( poli(str) )
                set.insert(str);
        std::cout << "Result: " << ( set.empty() ? "not found" : *set.begin() ) << std::endl;
    }
    
    return 0;
}
1
Feax
9 / 9 / 2
Регистрация: 04.03.2010
Сообщений: 40
11.03.2011, 12:44 #3
Исходить нужно из того, что такое палиндром. Палиндром это слово, которое с зада наперед читается также, как с переда на зад К примеру: шалаш, кабак, казак. Если на неизвестном языке, то это может быть набор символов, образующий палиндром ( например nas1221san, siporunuropis ). Так как тебе дается предложение в исходных данных, то тебе нужно его очистить от знаков препинания, и разбить на слова используя в качестве разделителя пробел. Ну и каждое слово проверить, палиндром оно, или нет, если да, то запомнить кол-во символов. Если в предложении два палиндрома или больше, то тот, у которого символов больше затирает тот, у которого их меньше.
Определить, является ли слово палиндромом можно сравнивая первую и последнюю букву слова, потом вторую и предпоследнюю и т.д. Нужен цикл, от 1 до половины длины слова с округлением в меньшую сторону( на случай, если кол-во букв не четное ). И сравнивать как то так: if (slovo[i]!==slovo[lenght(slovo)-i+1]) { выходим из цикла }.
P.S.: за синтаксис не ручаюсь, я с Си почти не знаком, но суть думаю ясна
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.03.2011, 14:02 #4
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
41
42
43
44
45
46
47
48
49
50
51
52
53
/////////////////////////////////////////////////////////////////////////////////////////
//Задано некоторое предложение на неизвестном языке. Назовем слово в нем чемпионом, 
//если оно является палиндромом и количество букв в нем максимально. Буквами алфавита 
//в неизвестном языке являются буквы латинского алфавита и арабские цифры. Гарантируется, 
//что других символов, кроме пробелов и знаков препинания в предложении нет.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));   
    std::cout << "Введите предложение: "
              << std::endl;
 
    T_str  s;
    getline(std::cin, s);
    std::replace_if(s.begin(), s.end(), ispunct, ' ');
 
    struct  T_get_max_palindrom
    {
        T_str  max_palindrom_;
        //-------------------------------------------------------------------------------
        void  operator() (const T_str&  word)
        {
            bool  is_palindrom = std::equal(word.begin(), word.end(), word.rbegin());
            if(is_palindrom
               && word.size() > max_palindrom_.size())
            {
                max_palindrom_ = word;
            }
        }
        //-------------------------------------------------------------------------------
        operator T_str()
        {
            return  max_palindrom_;
        }
    };
 
    std::istringstream  ssin(s);
    T_str  max_palindrom = std::for_each((std::istream_iterator<T_str>(ssin)), 
                                         (std::istream_iterator<T_str>()),
                                         T_get_max_palindrom());
 
    std::cout << (max_palindrom.empty() ? "Нет палиндромов." : "Слово-чемпион: " + max_palindrom)
              << std::endl;
}
1
DarkDiablo
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 12
16.02.2013, 17:39 #5
easybudda, Вы не могли бы написать эту программу с помощью обычных ифов, форов и прочитки строки string? Чтобы без всяких структур было? И чтобы не было цикла while, то есть ввод происходит 1 раз. А в выводе вместо самого слова палиндрома чтобы выводился его номер по порядку, слева на право. К примеру:
Ввод: Oo, it aaa is not bb.
Вывод: 3
Само условие: Задано некоторое предложение на неизвестном языке. Назовем слово в нем чемпионом, если оно является палиндромом и количество букв в нем максимально. Буквами алфавита в неизвестном языке являются буквы латинского алфавита и арабские цифры. Гарантируется, что других символов, кроме пробелов и знаков препинания в предложении нет.
0
DarkDiablo
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 12
17.02.2013, 18:07 #6
Ну что, поможет кто-то?
0
Fortan
3 / 5 / 0
Регистрация: 22.07.2009
Сообщений: 57
17.02.2013, 18:45 #7
Интересный вопрос
0
akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
18.02.2013, 01:16 #8
Цитата Сообщение от DarkDiablo Посмотреть сообщение
Ну что, поможет кто-то?
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
41
42
43
44
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
using namespace std;
int main()
{
    char str[100]=""; // исходная строка
    char s[]=" .,:;\"!?"; // строка разделителей 
    char * q; //указатель на текущее слово
    int f=1; //флажок
    int i, j;
    int kol=0;
    cout<<"Vvedite stroky: "<<endl; 
    gets(str);
    strlwr(str);
    if((q=strtok(str, s))!=NULL)
    {
        do
        {
            for(i=0, j=strlen(q)-1; i<j; i++, j--)
            {
                if(*(q+i)!=*(q+j)) 
                {
                    f=0;
                    break; //выйти из цикла, если два 
                           //противоположных символа не совпадают
                           //и изменить флажок на 0
                }
                else
                    f=1;   //дошли до конца цикла
                           //и противоположные символы совпадают
            }
            if(f)           // если противоположные символы совпадают
                kol++;      // увеличиваем счетчик
                
            q=strtok(NULL, s); // получаем адрес следующего слова
        }while(q);//q!=null если не конец строки
    }
    
    cout << "kol-vo="<<kol;
    getch();
    return 0;
}
Ну у меня так получилось, конечно там больше С, чем С++, но можно заменить аналогичными функциями
0
18.02.2013, 01:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2013, 01:16
Привет! Вот еще темы с ответами:

Результат функции зависит от ёё расположения в коде О_о - C++
Подскажите студенту пожалуйста в чём у меня косяк (ну кроме ДНК ): Функция по разному реагирует на расположение в коде . При...

В тексте заменить слово А(любое слово) на слово В(любое слово). А и В разной длинны - C++
Не могу сообразить как написать программу: Пользователь вводит текст Необходимо замениь слово А(любое слово) на слово В(любое...

тип данных С++, который в переменную вместит 10^100 о_О - C++
нужен тип данных С++, который в переменную вместит 10^100 . или способ, как работать с таким числом..спасибо

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О - C++
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C { public:


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru