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

Проверка полиндрома - C++

Восстановить пароль Регистрация
 
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
27.01.2013, 20:16     Проверка полиндрома #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
27
28
29
30
31
#include <iostream>
#include <iterator>
#include <string>
#include <algorithm>
using namespace std;
bool Polin(string &st);
int main()
{
    string word;
    cout<<"Please, enter a word: ";
    while(cin>>word&&word!="quit")
    {
        if(Polin(word))
            cout<<"A word "<<word<<" is a polindrom.\n";
        else
            cout<<"A word "<<word<<" is NOT a polindrom.\n";
        cout<<"Please, enter a word (or  to quit): ";
    }
    cout<<"Bye!\n";
    system("pause");
    return 0;
}
bool Polin(string &st)
{
    string temp;
    copy(st.rbegin(), st.rend(), temp.begin());
    if(temp==st)
        return true;
    else
        return false;
}
Если у кого есть идеи, подскажите плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2013, 20:16     Проверка полиндрома
Посмотрите здесь:

C++ Проверка!
C++ Проверка значения
C++ Проверка чисел
проверка C++
Проверка с if C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GggDrej
 Аватар для GggDrej
71 / 71 / 8
Регистрация: 21.01.2013
Сообщений: 147
27.01.2013, 20:56     Проверка полиндрома #2
эту функцию можно оформить так:
C++
1
2
3
4
5
6
7
bool p ( string str ){
    int q,s;
    s=str.length();
    for ( q=0; q<=s/2; q++ ) 
     if (str[q]!=str[s-q-1] ) return false;
    return true; 
}
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.01.2013, 21:07     Проверка полиндрома #3
Цитата Сообщение от Noobass Посмотреть сообщение
copy(st.rbegin(), st.rend(), temp.begin());
Всё дело в том, что вы пытаетесь произвести запись в строку нулевой длины. Для того чтобы добавить новые символы в конец контейнера, в качестве выходного итератора следует использовать специальную функцию back_inserter, возвращающую объект класса back_insert_iterator, перегруженный operator = которого вызывает метод push_back переданного ему объекта:
C++
1
copy(st.rbegin(), st.rend(), back_inserter(temp));
Хотя более эффективным является вариант с использование конструктора класса string
C++
1
string temp(st.rbegin(), st.rend());
Добавлено через 9 минут
Ну и не следует забывать про std::equal
C++
1
2
3
4
bool Polin(const string &st)
{    
    return std::equal(st.begin(), st.end(), st.rbegin());
}
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
28.01.2013, 17:37  [ТС]     Проверка полиндрома #4
Спасибо огромное, ребята!! Теперь все стало на свои места не только в программе, а и в моей голове .
З.Ы.: А что за equal? у меня и без него работает
Yandex
Объявления
28.01.2013, 17:37     Проверка полиндрома
Ответ Создать тему
Опции темы

Текущее время: 08:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru