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

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

Войти
Регистрация
Восстановить пароль
Рейтинг: 1.00. Голосов: 1.

С++ «Неделя вторая - Функции - Отбор палиндромов» #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;
}
Всего комментариев 1

Комментарии

  1. Старый комментарий
    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
    
    bool IsPalindrom(string s)
    {
        int i = 0;
        int size = s.size();
        while(1)
        {
            if (!(s[i] == s[size-i-1]))
                return false;
            else if (( i == (size-i-1) ) || (( i - (size-i-1) ) == 1)) 
                return true;
            i++;
        }
    }
     
    vector<string> PalindromFilter(vector<string> words,  int minLength)
    {
        vector<string> output;
        vector<string>::iterator it;
     
        for (it = words.begin(); it != words.end(); it++){
            if (((*it).size() >= (unsigned)minLength) && IsPalindrom(*it))
                output.push_back(*it);
        }
     
        return output;
    }
    Запись от flash_back размещена 03.10.2017 в 14:07 flash_back вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru