Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

Обьясните пожалуйста как это сделать??? А то я даж условия не понимая етого...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2011, 10:42     Слово чемпион о_О
Посмотрите здесь:

Найти в файле слово по заданному началу, вывести слово и его позицию - C++
Найти в файле слово по заданному началу, вывести слово и его позицию

Функция меняющая местами последнее слово строки на слово с указанным номером - C++
Помогите сделать функцию,которая в указанной строке меняет местами последнее слово и слово,номер которого определяется вторым параметром...

программа удаляющее последнее слово, выводит первое слово, что не так - C++
#include <iostream> using namespace std; int main() { char s; int i = 0; cout << "stroka: "; cin >> s; for(i =...

Дано слово а. Получить слово b, образованное нечётными буквами слова а. - C++
8.1.2. Помогите, пожалуйста, решить задачу в С++. Дано слово а. Получить слово b, образованное нечётными буквами слова а.

Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово? - C++
Даны два слова. Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово?

Ввести строку и слово. Вывести те слова, которые не содержат букв, входящих в слово. - C++
Ребят помогите плииизз... только мне сказали через стандартную библиотеку Добавлено через 1 минуту Ах да и если не сложно, пояснения...

Ввести строку и слово. Вставить введенное слово за самым коротким словом в строке. - C++
помогите

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
9459 / 5472 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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;
}
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.: за синтаксис не ручаюсь, я с Си почти не знаком, но суть думаю ясна
Mr.X
Эксперт С++
3048 / 1693 / 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;
}
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
Само условие: Задано некоторое предложение на неизвестном языке. Назовем слово в нем чемпионом, если оно является палиндромом и количество букв в нем максимально. Буквами алфавита в неизвестном языке являются буквы латинского алфавита и арабские цифры. Гарантируется, что других символов, кроме пробелов и знаков препинания в предложении нет.
DarkDiablo
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 12
17.02.2013, 18:07     Слово чемпион о_О #6
Ну что, поможет кто-то?
Fortan
3 / 5 / 0
Регистрация: 22.07.2009
Сообщений: 57
17.02.2013, 18:45     Слово чемпион о_О #7
Интересный вопрос
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2013, 01:16     Слово чемпион о_О
Еще ссылки по теме:

Дана строка, заменить слово min на слово max - C++
#include &lt;stdio.h&gt; int main() { int n = 81; char str; int i; gets(str);

Дано слово, состоящее только из строчных латинских букв. Проверьте, является ли это слово палиндромом. - C++
Дано слово, состоящее только из строчных латинских букв. Проверьте, является ли это слово палиндромом. Выведите YES или NO. Ввод...

Преобразовать каждое слово в тексте: если слово нечётной длины, то удалить его среднюю букву - C++
Задан текст. Между словами - пробел, за последним символом точка. Вывести текст, предварительно преобразовав каждое слово: если слово...

Пользователь вводит предложение и слово, а программа сообщает, есть ли такое слово в предложении или нет - C++
Кто знает, как решить задачу на С++? Задача на строки. Пользователь вводит предложение и слово, а программа сообщает, есть ли такое слово в...

Ввести строку и слово. Вывести те слова, которые не содержат букв, входящих в слово (через <stdio.h>) - C++
Помогите плз...лучше с пояснениями


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

Или воспользуйтесь поиском по форуму:
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;
}
Ну у меня так получилось, конечно там больше С, чем С++, но можно заменить аналогичными функциями
Yandex
Объявления
18.02.2013, 01:16     Слово чемпион о_О
Ответ Создать тему
Опции темы

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