Kiberchief
@Kiberchief
Пока учусь.

Почему палиндром не работает?

Знатоки Qt помогите пожалуйста,задача простая нужно всего лишь чтобы программа считала выбранный пользователем файл на палиндром и не палиндром.
Я реализовал выборку на файл и алгоритм проверки на палиндром но он работает не корректно все прекидует в НОТ Палиндорм
widget.cpp
#include "QtNameP.h"
#include "ui_widget.h"
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QString>
#include <algorithm>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    button{new QPushButton{"Add File",this}},
    ListP{new QTextEdit{"Palindrom",this}},
    ListNotP{new QTextEdit{"Not Palindrom",this}}
{
    QHBoxLayout* hlayo{new QHBoxLayout};
    hlayo->setMargin(50);
    hlayo->setSpacing(50);
    hlayo->addWidget(ListP);
    hlayo->addWidget(ListNotP);
    this->setLayout(hlayo);


    connect(button,&QPushButton::clicked,
            this,&Widget::AddFile);
//    connect(this,&Widget::AddFile,
//            this,QOverload<>::of(&Widget::CheckPalindrome));
}

Widget::~Widget()
{

}

void Widget::AddFile()
{
    QString filename=QFileDialog::getOpenFileName(
                this,
                tr("Open File"),
                tr("All File (*.*);;Text File(*.txt)"
                ));

    QFile file(filename);
    if (!file.open(QIODevice::ReadOnly))
        QMessageBox::information(this,tr("Unable to open file"),file.errorString());
    Pal(file);
}

void Widget::Pal(QFile& file)
{
    QTextStream in (&file);
    QString line=in.readAll();
//    line.simplified().remove(' ');
    if (std::equal(line.begin(), line.begin() + line.size()/2, line.rbegin()))
    {
    ListP->setText(line);
    }
    else{
    ListNotP->setText(line);
    }
}


void Widget::SaveFile()
{

}

Qtname.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QtWidgets>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
    void AddFile();
    void Pal(QFile& file);
    void SaveFile();
protected:
    QPushButton* button;
    QTextEdit* ListP;
    QTextEdit* ListNotP;
};

#endif // WIDGET_H

main.cpp
#include "QtNameP.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 1
@pyatibratovaru
В строке if (std::equal(line.begin(), line.begin() + line.size()/2, line.rbegin())) замените line.begin() + line.size()/2 на line.end()
Тогда правильно, будет определять палиндром или нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы