Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает программа 
:(
    Опции темы
Julia9311
Дата 12.12.2012, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 6.12.2012

Репутация: нет
Всего: нет



По идее эта программа должна с помощью функции getline() считывать строки текстового файла и проверять, является ли записанное в каждой строке выражение палиндромом. Программа работает, но выполняет не то... помогите разобраться, пожалуйста!)


Код

#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
 
bool isPal(const std::string& s, size_t i, size_t j)
{
    if(i >= s.length() || j >= s.length()) return false;
    if(i > j) std::swap(i, j);
    return std::equal(s.begin() + i, s.begin() + j, s.rbegin() + s.length() - j - 1);
}
 
int main()
{
    std::ifstream File_input("text1.txt", std::ifstream::in);
    std::string s;
    std::cout<<"Press ENTER to continue...";
    while(File_input) 
   {
    std::cout<<s<<std::endl;
    std::cin.get();
    std::getline(File_input, s);
    size_t i, j;
    std::cout << "i and j: ";
    std::cin >> i >> j;
    std::cout << (isPal(s, i, j)? "yes" : "no" );
    }
    File_input.close();
    return 0;
}

PM MAIL   Вверх
borisbn
Дата 13.12.2012, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



почему сначала печатается строка
Цитата(Julia9311 @  12.12.2012,  23:15 Найти цитируемый пост)
 std::cout<<s<<std::endl;

а потом она считывается из файла ?
Цитата(Julia9311 @  12.12.2012,  23:15 Найти цитируемый пост)
std::getline(File_input, s);

как по Вашему, правильнее наоборот ? ))

Цитата(Julia9311 @  12.12.2012,  23:15 Найти цитируемый пост)
 std::cin.get();

это зачем ?

а по поводу i и j я вообще не понял... зачем они ???

почитай про то, что такое Палиндром

в общем, алгоритм д.б. такой:
1) прочитать очередную строку из файла
2) напечатать её на экране
3) проверить, что 0-й символ равен последнему, 1-й - предпоследнему, 2-й - предпредпоследнему, и т.д.
4) если все пары символов равны, то напечатать "yes", иначе - "no"


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
feodorv
Дата 13.12.2012, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(borisbn @  13.12.2012,  10:10 Найти цитируемый пост)
3) проверить, что 0-й символ равен последнему, 1-й - предпоследнему, 2-й - предпредпоследнему, и т.д.

Можно здесь подсмотреть smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Julia9311
Дата 13.12.2012, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 6.12.2012

Репутация: нет
Всего: нет



С программой разобралась) но как теперь сделать, чтобы строки считывались именно с помощью getline()?


Код

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std; 
int main()
{   
   int n,j,f,k;
   char ar1[100];
   char ar2[100];
   FILE *f1;
   f1=(fopen("text.txt","r"));
   fgets(ar1,100,f1);              
   n=strlen(ar1);   
   j=0; f=0; k=0;   
   while(k<n)               
   {
       if(ar1[k]==' ')       
   {
   for(int j=k; j<n; j++) 
   ar1[j]=ar1[j+1];
   n--;
   k--;
   }                              
   k++;
   }
   for(int i=n-1; i>=0; i--)               
   {
   for(j=f; j<n; j++)
   {
    ar2[j]=ar1[i];
       }
            j=0;
           f++;
              }
            int p;                                  
                p=strncmp(ar1,ar2,n); 
         if(p==0) 
        cout << "Eto polindrom\n\n"; 
          else 
            cout << "Eto ne polindrom\n\n";
 
 
return 0;
}
 

PM MAIL   Вверх
volatile
Дата 14.12.2012, 00:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Первый вариант был много лучше.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.