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

И снова палиндром - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ программа которая по номеру дня в году выводит число и месяц http://www.cyberforum.ru/cpp-beginners/thread349113.html
программа которая по номеру дня в году выводит число и месяц (например, 7-й день года — 7 января) что б при запуске появилось сообщение (Введите номер дня в году ) ну и вводим от 1 до 365 например 20 и выводится надпись (20 января)
C++ текстовый документ и масив господа подскажите, вот в текстовом документе мы имеем допустим фразу "Hello World" как мне её от туда извлеч и сделать что бы она была в символьном масиве. Заранее огромное всем спасибо!!! http://www.cyberforum.ru/cpp-beginners/thread349087.html
Запуск программы после ввода её названия C++
Подскажите пожалуйста какой аргумент нужно вводить в cin, чтобы когда пользователь прописывал название программы например calc.exe, а затем нажимал клавишу ввод - она запускалась ? Вот код: #include <iostream> #include <windows.h> #include <conio.h> using namespace std; int a; int main(){ while (1) { cout << "type a program name" <<' ';
C++ Hello, World!
Добрый день. Купил книгу Б.Страуструпа - Принципы и практика использования С++, Напечатал первый код , при компиляции выскочили ошибки. #include "std_lib_facilities.h" int main() { cout << "Hello, World!\n"; return 0; }
C++ Проблема с vector http://www.cyberforum.ru/cpp-beginners/thread349028.html
Объявляю булевый вектор vector<bool> used; затем заполняю его false'ами for (int i=0; i<n; i++) used = false; выходит ошибка при компиляции: Debug Assertion Failed!
C++ Посоветуйте среду программирования на С++ для новичков CodeBlocks к сожалению немного не правильно работает =( http://www.cyberforum.ru/cpp-beginners/thread347740.html#post1957942 Есть что-нибудь похожее? подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.09.2011, 14:58     И снова палиндром
jambas92, решение "в лоб" на самом деле... Думаю, можно было и красивее эту задачу решить. Вот с комментариями:

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
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <string>
#include <algorithm>
 
// Функция из строки символов letters составляет максимальный по длине и первый
// по алфавиту палиндром
std::string get_palindrome(std::string letters)
{
    // Для удобства переопределяем имена типов
    typedef std::string str_t;
    typedef std::string::size_type str_size_t;
    typedef std::string::value_type str_value_t;
 
    // Сортируем строку символов
    std::sort(letters.begin(), letters.end());
 
    // Результирующая строка-палиндром
    str_t palindrome;
    // Средний элемент
    str_value_t middle;
    // Наличие среднего элемента
    bool has_middle = false;
 
    // В цикле идём по строке символов
    for (str_size_t i = 0; i < letters.length(); ++i)
    {
        // Считаем количество входнеий очередного символа в строке символов
        size_t cnt = std::count(letters.begin(), letters.end(), letters[i]);
 
        // Если это количество нечётно
        if ((cnt & 1) == 1)
        {
            // Если средний символ ещё не определён
            if (!has_middle)
            {
                // Определяем средний символ
                middle = letters[i];
                has_middle = true;
            }
        }
 
        // К результирующему палиндрому добавляем cnt / 2 символов
        palindrome += std::string(cnt / 2, letters[i]);
 
        // В строке символов пропускаем все одинаковые символы
        i += cnt - 1;
    }
 
    // Возвращаем в качестве результата вычисленную в цикле половинку палиндрома
    // плюс середину (если она есть) плюс обращённую половину вычисленного
    // палиндрома
     return palindrome + (has_middle ? std::string(1, middle) : "") + std::string(palindrome.rbegin(), palindrome.rend());
}
 
int main()
{
    std::string letters;
 
    std::cout << "Enter letters: ";
    std::cin >> letters;
 
    std::cout << "Palindrome: " << get_palindrome(letters) << std::endl;
 
    return 0;
}
 
Текущее время: 14:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru