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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Передача строк в функцию 
V
    Опции темы
smagin4ik
  Дата 31.1.2012, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задание:
Написать программу, которая считывает текст из файла и выводит на экран только предложения ,состоящие из заданного количества слов. 
Оформить в виде функций законченные последовательности действий. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.


Код

#include <iostream>
#include<fstream>
#include <stdio.h>
using namespace std;
int cikl(int k){
ifstream fin("text.txt");
if (!fin) { cout<<"Error in open file!"<<endl; return 1;
}
fin.seekg(0, ios::end);
long len=fin.tellg();
char *buf=new char [len+1];
fin.seekg(0, ios::beg);
fin.read(buf, len);
fin.close();
buf[len]='\0';
long n=0, i=0, j=0, kw=1;
ofstream fout("output.txt");
while(buf[i]){

if (buf[i]==' ') kw++;
if (buf[i]=='?' || buf[i]=='.' || buf[i]=='!') 
if (kw==k){
for (j=n; j<=i; j++) fout<<buf[j];
fout<<"\n";
n=i+1;
}
else {n=i+2; kw=0;}
i++;
}
fout.close();
return 0;}
int main()
{int k;
cout<<"How many words are necessary in a sentence?\n"<<"k=";
cin>>k;
cikl(k);
return 0;
}


У меня с циклом какая-то проблема,не могу понять=\у меня считает кол-во слов в первом предложение и останавливает цикл,т.е другие предложения вообще не видит smile 
помогите пожалуйста  smile  




PM MAIL Skype   Вверх
t_gran
Дата 1.2.2012, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

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



Да если честно Ваш цикл вообще нифига нормально не работает, ибо это бред.
Код

#include <iostream>
#include <fstream>
#include <cctype>

using namespace std;

int cikl(unsigned k)
{
   ifstream fin("text.txt");
   if (!fin)
   {
      cout << "Error in open file!" << endl;
      return 1;
   }
   fin.seekg(0, ios::end);
   unsigned len = fin.tellg();
   cout << len << endl;
   char* buf = new char [len + 1];
   fin.seekg(0, ios::beg);
   fin.read(buf, len);
   fin.close();
   buf[len] = '\0';
   ofstream fout("output.txt");
   
   // Мой вариант
   unsigned begin = 0, length = 0;

   for (unsigned i = 0; i < len; ++i)
   {
      if (::isalpha(buf[i]))
      {
         length++;
      }
      else
      {
         if (length == k)
         {
            for (unsigned j = 0; j < k; ++j)
            {
               fout << buf[begin+j];
            }
            fout << endl;
         }

         begin = i+1;
         length = 0;
      }
   }
   // Конец моего варианта

   fout.close();
   return 0;
}
int main()
{
   int k;
   cout << "How many words are necessary in a sentence?\n" << "k=";
   cin >> k;
   cikl(k);
   return 0;
}


P.S.: На будущее, форматируйте код. Код, который Вы предоставили, является издевательством. 

Бинарник с исходником ниже

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  archive.7z 148,85 Kb


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
smagin4ik
Дата 2.2.2012, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за помощь и за замечание,учту

не знаю в чем дело,может у меня руки кривые,но ваш вариант программы выводит слова состоящие из заданного кол-ва букв,а не предложения состоящие из заданного кол-ва слов(

PM MAIL Skype   Вверх
t_gran
Дата 2.2.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

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



smagin4ik, верно, это я так прочитал задание (стыдно). Извиняюсь за наезд.
Тогда вот так:
Код

#include <iostream>
#include <fstream>
#include <cctype>

using namespace std;

int cikl(unsigned k)
{
   ifstream fin("text.txt");
   if (!fin)
   {
      cout << "Error in open file!" << endl;
      return 1;
   }
   fin.seekg(0, ios::end);
   unsigned len = fin.tellg();
   char* buf = new char [len + 1];
   fin.seekg(0, ios::beg);
   fin.read(buf, len);
   fin.close();
   buf[len] = '\0';

   ofstream fout("output.txt");
   
   unsigned begin = 0, count = 0;
   int length = 0;
   bool isWord = false;

   for (unsigned i = 0; i < len; ++i)
   {
      if (::isalpha(buf[i]))
      {
         if (!isWord)
         {
            if (count == 0)
            {
               begin = i;
               length = 0;
            }

            isWord = true;
            count++;
         }
      }
      else
      {
         isWord = false;

         if (buf[i]=='?' || buf[i]=='.' || buf[i]=='!')
         {
            if (count == k)
            {
               for (unsigned j = 0; j <= (unsigned)length; ++j)
               {
                  fout << buf[begin+j];
               }
               fout << endl << "--------------------" << endl;
            }
            count = 0;
         }
      }
      
      length++;
   }
   
   fout.close();
   
   delete [] buf;
   
   return 0;
}

int main()
{
   int k;
   cout << "How many words are necessary in a sentence?\n" << "k=";
   cin >> k;
   cikl(k);
   return 0;
}
 
Поставил разделение предложений в виде линий. Т.к. предложение копируется как есть, и может быть переход, что в свою очередь может создать предположение о не верности выполнения алгоритма.


Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  archive.7z 79,70 Kb


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
smagin4ik
Дата 2.2.2012, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile 
Спасибо огромное!
Все работает! smile 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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