1 / 1 / 0
Регистрация: 02.01.2020
Сообщений: 25
1

Задача на палиндром с использованием ссылок

17.04.2020, 18:25. Показов 420. Ответов 4

Author24 — интернет-сервис помощи студентам
Добрый день
Прохожу "Белый пояс" с С++ на курсере.
И была там задача про палиндром, которое я с горем пополам сделал. Не без помощи интернета.

И вот следующее видео было про использование ссылок для изменения исходной переменой, вектора и чего-то еще.
Решил я значит переделать свой код так что бы он мне сразу менял исходный вектор, что бы сократить функцию и переманить знания на практике.

В целом программа должна проверять слово на длину и все что меньше 5 удалять с вектора, а так же проверять все слова на палиндромность и удалять в случае негативного результата.

На деле полная чушь получается!)

Очень уж хочется разобраться!)

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
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
 
 
using namespace std;
 
bool palindrom (string x) {
    for (int i = 0; i < x.size()/2; i++){
        if (x[i] != x[x.size() - i - 1]){
            return false;
        }
    }
return true;
}
 
void palindromFiltr (vector<string>& words, int minLenght) {
    for (auto c: words){
        if (c.size()>=minLenght){
            if(polindrom(c)==false) {  // Если слово не палиндром - удалить
                words.erase(words.begin());
            } else if (c.size()<minLenght){ // Если слово не подходит по размеру - удалить
                words.erase(words.begin());
            }
        }
    }
}
 
 
int main(int argc, const char * argv[]) {
    
    vector<string> anyWords;
    int i;
    string a;
    cout << "how many words will you write?";
    cin >> i;
    for(int j = 0; i>j; j++){
        cout << "word?" << endl;
        cin >> a;
        anyWords.push_back(a);
    }
    polindromFiltr(anyWords, 5);
    for (auto c : anyWords){
        cout << c << endl;
    }
    
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2020, 18:25
Ответы с готовыми решениями:

Задача палиндром
Анна написала генератор красивых строк. Она считает строку красивой, если она одинаково читается...

Задача про палиндром!
Добрый День! У меня проблема с задачей про палиндром, нужно ввести любую цифру(n&gt;0) и найти все...

Задача. Наименьший палиндром
Доброго времени суток! Помогите пожалуйста в коде перевести char to int, и наоборот. Мне нужно...

Задача на палиндром, сигнум и косинус.
Поступил на первый курс. Сразу дали такие задачки. Препод ничё не объясняет, мол сами делайте как...

4
168 / 90 / 44
Регистрация: 22.09.2019
Сообщений: 399
17.04.2020, 19:11 2
D_DWow, 1) Вы никогда не попадете в else if на 23 строке, потому что на 20 строке уже проверили размер.
2) Разное название функций на 9, 18, 21 и 43 строках. Поправьте.
3) Вы всегда удаляете из начала вектора. Посмотрите, что будет, если удаляемый элемент будет в середине.
0
1 / 1 / 0
Регистрация: 02.01.2020
Сообщений: 25
17.04.2020, 21:07  [ТС] 3
Попробовал поправить код используя советы выше.
Немного решил переделать перебор самого вектора. Не уверен что получилось, то что надо.

Вот какой результат я получаю при компиляции.

how many words will you right?3
word?
rrrrrrr
word?
fff
word?
bbbbbbbb
bbbbbbbb
Program ended with exit code: 0

P.S. иногда программа закрывается после "how many words will you right?"

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
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
 
 
using namespace std;
 
bool palindrom (string x) {
    for (int i = 0; i < x.size()/2; i++){
        if (x[i] != x[x.size() - i - 1]){
            return false;
        }
    }
return true;
}
 
void palindromFiltr (vector<string>& words, int minLenght) {
    string a;
    for (int i = 0; i<words.size(); i++){
        if (words[i].size() >= minLenght){
            a = words[i];
            if(palindrom(a)==false) {  // Если слово не полиндром - удалить
                words.erase(words.begin());
            } else { // Если слово не подходит по размеру - удалить
                words.erase(words.begin());
            }
        }
    }
}
 
 
int main(int argc, const char * argv[]) {
    
    vector<string> anyWords;
    int i;
    string a;
    cout << "how many words will you right?";
    cin >> i;
    for(int j = 0; i>j; j++){
        cout << "word?" << endl;
        cin >> a;
        anyWords.push_back(a);
    }
    palindromFiltr(anyWords, 5);
    for (auto c : anyWords){
        cout << c << endl;
    }
    
    return 0;
}
0
168 / 90 / 44
Регистрация: 22.09.2019
Сообщений: 399
17.04.2020, 21:39 4
D_DWow, поправил, вроде работает
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
#include <vector>
 
 
using namespace std;
 
bool palindrom(string x) {
    for (int i = 0; i < x.size() / 2; i++) {
        if (x[i] != x[x.size() - i - 1]) {
            return false;
        }
    }
    return true;
}
 
void palindromFiltr(vector<string> &words) {
    string a;
    for (int i = 0; i < words.size(); i++) {
        a = words[i];
        if (!palindrom(a)) {  // Если слово не полиндром - удалить
            words.erase(words.begin() + i);
            vector<string>(words).swap(words);
        }
 
    }
}
 
 
int main(int argc, const char *argv[]) {
 
    int max_length = 5;
    vector<string> anyWords;
    int i;
    string a;
    cout << "how many words will you right?";
    cin >> i;
    for (int j = 0; i > j; j++) {
        cout << "word?" << endl;
        cin >> a;
        if (a.size() >= max_length) {
            anyWords.push_back(a);
        }
    }
    palindromFiltr(anyWords);
    for (auto c : anyWords) {
        cout << c << endl;
    }
 
    return 0;
}

И все равно. Неужели Вы не видите, что из-за условия на 22 строке у Вас не идет дальше цикл. Дебаггер Вам в помощь.
0
1 / 1 / 0
Регистрация: 02.01.2020
Сообщений: 25
18.04.2020, 21:47  [ТС] 5
Спасибо что попросили код.
Очень интересно функция переделана.
C++
1
2
3
4
5
6
7
8
9
10
11
void palindromFiltr(vector<string> &words) {
    string a;
    for (int i = 0; i < words.size(); i++) {
        a = words[i];
        if (!palindrom(a)) {  // Если слово не полиндром - удалить
            words.erase(words.begin() + i);
            vector<string>(words).swap(words);
        }
 
    }
}
Есть одно НО)
Я хотел написать программу которая сначала создает вектор, а потом функция фильтрует по длине элемента и палиндромности
0
18.04.2020, 21:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2020, 21:47
Помогаю со студенческими работами здесь

Олимпиадная задача - наименьший палиндром
Палиндромом будем называть число, запись которого в десятичной системе счисления одинаково...

цифры в слове ( задача про палиндром )
Нужно сделать так чтобы при попытке пользователя ввести что то типа 22222 или п2о2п или 22привет...

Слово-палиндром, насколько эффективно решена задача
Здравствуйте, вот готовлюсь к ЕГЭ, тренируюсь решать С4. Скажите пожалуйста, насколько эффективно...

Найти ближайший простой палиндром, больший заданного n (задача из раздела C++)
Мое решение: isPal n = s == rs where s = show n rs = reverse s ...

минимальный элемент. с использованием ссылок.
помогите пожалуйста найти ошибку: нужно найти минимальный элемент. ну тут предельно простой код)...

Программирование с использованием ссылок. Управление памятью в С++
Народ, помогите программу написать, пожалуйста. Условие : Написать программу с использованием...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru