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

С++ «Неделя вторая - Функции - Отбор палиндромов» #7

Войти
Регистрация
Восстановить пароль
Оценить эту запись

С++ «Неделя вторая - Функции - Отбор палиндромов» #7

Запись от acmades размещена 13.07.2017 в 16:14
Обновил(-а) acmades 15.07.2017 в 13:12 (Изменение категории)

Продолжаю свою эпопею по изучению С++. Чем дальше тем интереснее.

Задание:
Напишите функцию, которая

называется PalindromFilter
возвращает vector<string>
принимает vector<string> words и int minLength и возвращает все строки из вектора words, которые являются палиндромами и имеют длину не меньше minLength
Входной вектор содержит не более 100 строк, длина каждой строки не больше 100 символов.

Примеры

words -> minLength -> результат
abacaba, aba -> 5 -> abacaba
abacaba, aba -> 2 -> abacaba, aba
weew, bro, code -> 4 -> weew
Пояснение

В этой задаче вам надо сделать файл с реализацией функции PalindromFilter, а также других функций, если это необходимо (например, функции проверки на палиндром).

Моё решение:
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
#include "stdafx.h" //для Visual studio
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool IsPalindrom(string i) { //функция определения палиндрома
    vector<char> r; //вспомогательный вектор сделаю
    for (auto ch : i) { //положу строку в вектор
        r.push_back(ch); //каждую букву в вектор
    }
    int leight = r.size(); //определю размер (сколько букав в строке)
    for (auto ch2 : r) { //теперь у меня есть возможность обращаться к символам строки по индексу
        if (ch2 != r[leight - 1]) return false; //сравниваю первый и последний и т.д. (второй и предпоследний)
        leight--; //"хороший" индекс - с последней буквы до первой дойдет, уменьшается
    }
    return true; //если предыдущий цикл прошел без "фальши", то возвращаем "тру" (значит строка - палиндром)
}
vector<string> PalindromFilter(vector<string> words, int minLength) { //фильтруем палиндромы
    vector<string> Output; //вектор для вывода
    for (auto i : words) { //перебираем все строки
        if (IsPalindrom(i) && i.size() >= minLength) { //если строка является палиндором и больше или равна нужной длинны, то...
            Output.push_back(i); //...записываем в вектор для вывода
        }
    }
    return Output; //возвращаем новый вектор
}
int main() //этого нет в задании, так для себя ))))
{
    vector<string> words = { "sdfslk","dsksd","kddk","dd",";lwjlerjlwer" };
    int minLength = 3;
    int sh = 0;
    string a = "";
    for (string i : PalindromFilter(words, minLength)) {
        sh++;
        if (sh > 1) { a = ", "; }
        cout << a << i;
    }
    return 0;
}
Всего комментариев 0

Комментарии

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