Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/55: Рейтинг темы: голосов - 55, средняя оценка - 4.78
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 92

Функция определения палиндрома

11.07.2017, 02:33. Показов 11441. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите функцию, которая
называется IsPalindrom
возвращает bool
принимает параметр типа string и возвращает, является ли переданная строка палиндромом
Подскажите что не так с кодом?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool IsPalindrom (vector<string> x)
{   vector<string> y;
    for (auto a:x)
    {
         y.push_back(a);
    }
    if (x==y)
      return true;
    else
        return false;
    
    }
    int main() {
        string x;
        cin>> x;
    cout<<IsPalindrom (x);
    
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.07.2017, 02:33
Ответы с готовыми решениями:

Рекурсивная функция определения палиндрома строки.
Написал по заданию из книги Дейтелов. bool testPalindrome( const char arr, const size_t &amp;x, const size_t &amp;y = NULL ) { if ( x == y...

Написать блок схему определения строки-палиндрома
Помогите пожалуйста написать блок схему для этой программы. Я просто не знаю, как это для функций делать? #include &lt;stdlib.h&gt; ...

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

36
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
11.07.2017, 02:56
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
Подскажите что не так с кодом?
Всё, ты зачем то вектор строк передаёшь.
Должно быть что-то такое:
C++
1
2
3
4
5
6
7
bool IsPalindrom(const std::string& str)
{
  for(size_t i = 0; i < str.size() / 2; i++)
    if(str[i]!=str[str.size()-1-i])
      return false;
  return true;
}
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
11.07.2017, 03:03
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <algorithm>
 
bool is_palindrome(const std::string & s) {
    std::string r(s);
    std::reverse(r.begin(), r.end());
    return s == r;
}
 
int main() {
    std::string s;
    
    while ( std::cout << "String: " && std::getline(std::cin, s) && ! s.empty() )
        std::cout << "Is " << ( ( is_palindrome(s) ) ? "" : "not ") << "a palindrome." << std::endl;
    
    return 0;
}
1
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
11.07.2017, 03:08
easybudda, stl головного мозга...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
11.07.2017, 03:17
DevAlone, вот это ты ржачно пошутил, ага!

C++
1
2
3
bool is_palindrome(const std::string & s) {
    return ( s.length() < 2 ) ? true : ( s[0] != s[s.length() - 1] ) ? false : is_palindrome(s.substr(1, s.length() - 2));
}
0
Заблокирован
11.07.2017, 03:59
Цитата Сообщение от easybudda Посмотреть сообщение
is_palindrome(s.substr(1, s.length() - 2))
Нужно больше временных объектов!
0
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 92
11.07.2017, 11:19  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <algorithm>
 
bool is_palindrome(const std::string & s) {
    std::string r(s);
    std::reverse(r.begin(), r.end());
    return s == r;
}
 
int main() {
    std::string s;
    
    while ( std::cout << "String: " && std::getline(std::cin, s) && ! s.empty() )
        std::cout << "Is " << ( ( is_palindrome(s) ) ? "" : "not ") << "a palindrome." << std::endl;
    
    return 0;
}
Можете обьяснить что к чему? не могу понять.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
11.07.2017, 11:32
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
Можете обьяснить что к чему?
Да всё просто: если длина строки меньше двух - палиндром (строку из одного символа или вообще пустую с какой стороны ни читай...), иначе если первый символ не равен последнему - не палиндром, иначе взять подстроку со второго до предпоследнего символа и проверить её. Кстати, так красивше:
C++
1
2
3
bool is_palindrome(const std::string & s) {
    return ( s.length() < 2 ) || ( s[0] == s[s.length() - 1] ) && is_palindrome(s.substr(1, s.length() - 2));
}
0
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 92
11.07.2017, 11:51  [ТС]
Цитата Сообщение от DevAlone Посмотреть сообщение
const std::string& str
можете объяснить эту строчку?

Добавлено через 17 минут
Цитата Сообщение от easybudda Посмотреть сообщение
return ( s.length() < 2 ) || ( s[0] == s[s.length() - 1] ) && is_palindrome(s.substr(1, s.length() - 2)); }
если длина меньше 2 или совпадают 1 и 2 значения возвращается true.мудрено, но разобрался.
Цитата Сообщение от easybudda Посмотреть сообщение
const std::string & s
подскажите почему такая запись?а именно & s?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
11.07.2017, 12:03
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
подскажите почему такая запись?а именно & s?
Это ссылка (reference). Позволяет избежать накладных расходов при копировании. Обычно аргумент передаётся в функцию по значению. Это значит, в функцию передаётся не оригинальный объект, а его копия. Передача по ссылке даёт команду компилятору работать непосредственно с объектом (с оригиналом), а не с его копией.
Сравните две функции:
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
#include <iostream>
 
void change_arg(int & num) // передача по ссылке
{
    ++num;
    std::cout << "\nThe argument has not been copied. The value of the original variable: "
              << num;
}
 
void do_not_change_arg(int num) // передача по значению
{
    ++num;
    std::cout << "\nThe argument has been copied. The value of the copy: "
              << num;
};
 
int main()
{
    int z = 10;
    change_arg(z);
    std::cout << "\nThe value of z: " << z;
 
    z = 10;
    do_not_change_arg(z);
    std::cout << "\nThe value of z: " << z;
 
    return 0;
}
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
11.07.2017, 12:07
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
подскажите почему такая запись?
В функцию передаётся ссылка на константную строку. Если строка уже существует где-то в памяти, нет смысла копировать её для передачи в параметре. Ну а поскольку строка в функции не должна меняться, передаётся именно const string &.
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
мудрено, но разобрался.
Рекурсивные алгоритмы, как правило, логичнее и проще для понимания (к тому же по-своему красивы), но в реальных программах от них лучше уходить. Как верно подметил гражданин с самоопределяющим ником в шестом посте, при каждом рекурсивном вызове создаётся новая строка на пару символов короче исходной, что само по себе накладно. Плюс - стек не резиновый и при достаточно больших входных данных рекурсивная функция запросто приведёт к его переполнению.
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
11.07.2017, 12:32
100500 раз уже обсуждалось.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <algorithm>
 
bool isPalindrom(const std::string & s)
{ return std::equal(s.begin(), s.begin() + s.size() / 2, s.rbegin()); }
    
 
int main()
{
    std::cout 
        << std::boolalpha
        << isPalindrom("asd") << "\n"
        << isPalindrom("asdsa") << "\n";
}
0
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 92
11.07.2017, 13:02  [ТС]
Спасибо за ссылки понял.
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
11.07.2017, 14:26
Цитата Сообщение от easybudda Посмотреть сообщение
DevAlone, вот это ты ржачно пошутил, ага!
Твоё решение не эффективно, я об этом.

Добавлено через 2 минуты
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
C++
1
const std::string& str
можете объяснить эту строчку?
& - передача по ссылке, вместо копирования строки и создания нового объекта компируется только её адрес(обычно 4-8 байт), что значительно эффективнее. const - указывает, что данные, на которые ссылается str не должны меняться.
1
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 92
11.07.2017, 15:05  [ТС]
Получилось у меня вот так
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
#include <iostream>
#include <string>
using namespace std;
bool IsPalindrom (string str)
{
int len = str.size();
if(len>1)
{ for (int i=0;i<len/2; i++)
{
if (str[0]!=str[len-1])
{
return false;
}
}
return true;
}
else
{
return true;
}}
int main() {
string str;
cin>> str;
cout<<IsPalindrom (str);
return 0;
}
Только вот на сайте эта функция проверку почему то не проходит.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
11.07.2017, 15:31
Цитата Сообщение от DevAlone Посмотреть сообщение
компируется только её адрес
вообще-то нет.
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
Получилось у меня вот так
ты постоянно первый символ с последним сравниваешь.

Добавлено через 14 секунд
Цитата Сообщение от DevAlone Посмотреть сообщение
компируется только её адрес
вообще-то нет.
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
Получилось у меня вот так
ты постоянно первый символ с последним сравниваешь.
1
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 92
11.07.2017, 15:37  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
ты постоянно первый символ с последним сравниваешь.
Спасибо увидел.исправил на
C++
1
if (str[i]!=str[len-i-1])
Заработало)
0
11.07.2017, 15:59

Не по теме:

Цитата Сообщение от GbaLog- Посмотреть сообщение
Цитата Сообщение от DevAlone Посмотреть сообщение
компируется только её адрес
вообще-то нет.
Грядет война... :D

0
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 92
11.07.2017, 17:06  [ТС]
Подскажите, пытаюсь разобраться с векторами.
задача
Напишите функцию, которая
называется PalindromFilter
возвращает vector<string>
принимает vector<string> words и int minLength и возвращает все строки из вектора words, которые являются палиндромами и имеют длину не меньше minLength
Входной вектор содержит не более 100 строк, длина каждой строки не больше 100 символов.
Пример: abacaba, aba 5 abacaba
Пока сообразил такие 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
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool IsPalindrom (string str)
 {
    int len = str.size();
  if(len>1)
 {  for (int i=0;i<len/2; i++)
    {
        if (str[i]!=str[len-i-1])
        {
            return false;
        }
        }
        return true;
    }
 else
 {
    return true;
 }}
 vector<string> PalindromFilter(vector<string> words, int minLength)
    {   
        for(int i=0;i<words.size();i++)
    {
    if(IsPalindrom[i]==true && words[i].size()>minLength)
    {
        return word[i];
    }
    }
    
}
Задумка правильная или хромает так же как и реализация?
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
11.07.2017, 17:32
Цитата Сообщение от GbaLog- Посмотреть сообщение
вообще-то нет.
GbaLog-, с чего это вдруг?

Добавлено через 2 минуты
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
if(len>1)
абсолютно бесполезная операция.
И форматируй код нормально, чтоб читать можно было
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2017, 17:32
Помогаю со студенческими работами здесь

Не работает функция определения OC
Подскажите почему не работает эта функция? Запускаю под линуксом он должен вывести 'OC linux' - но не чего не выводиться. Подскажите...

Функция определения IP компьютера.
помогите какая функция определяет ip компьютера

Функция определения, существует ли переменная
Есть ли такая функция, которая определяет, существует ли переменная? В PHP можно просто написать if ($var) {...} А в JS если пишешь ...

Функция определения максимального из двух
Возможно ли вызвать функцию max(определение максимального из двух чисел, если не объявить ее в тексте программы? Программа работает...

Функция определения високосного года
Подробно объяснить код uses crt; function IsLeapYear(y:word):boolean; begin IsLeapYear:=((y mod 100&lt;&gt;0)and(y mod 4=0))or(y mod...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 11.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru