C++ и проблема

Автор PROFessoR, 13 Вересень 2012, 19:50:49

Попередня тема - Наступна тема

PROFessoR

Помогите, пожалуйста, закодить такую програмку на с++ дос-версию)
которая принимает название текстового файла
потом выводит общее к-во строк.
Не считаются поля которые пустые тобиш имеют только пробелы и ТАБы,
также все строки которые находятся между словами т.е.
когда WITH тогда попуск(руксивом не должны считатся) счетчика аж до DENIAL
then считаем дальше

LOAD UP ON GUNS AND BRING YOUR FRIENDS
IT'S FUN TO LOSE AND TOO PRETEND
SHE'S OVER BORED AND SELF ASSURED
OH NO, I KNOW A DIRTY WORD

HELLO, HELLO, HELLO, HOW LOW?

WITH THE LIGHTS OUT, IT,S LESS DANGEROUS
HERE WE ARE NOW, ENTERTAIN US
I FEEL STUPID AND CONTAGIOUS
HERE WE ARE NOW, ENTERTAIN US
A MULATTO
AN ALBINO
A MOSQUITO
MY LIBIDO
YAY, A DENIAL


I'M WORSE AT WHAT I DO BEST
AND FOR THIS GIFT I FEEL BLESSED
OUR LITTLE TRIBE HAS ALWAYS BEEN
AND ALWAYS WILL UNTIL THE END

HELLO, HELLO, HELLO, HOW LOW?

WITH THE LIGHTS OUT, IT,S LESS DANGEROUS
HERE WE ARE NOW, ENTERTAIN US
I FEEL STUPID AND CONTAGIOUS
HERE WE ARE NOW, ENTERTAIN US
A MULATTO
AN ALBINO
A MOSQUITO
MY LIBIDO
YAY, A DENIAL

YuGa-92

#1
В тебе вже якісь сирці є? Кидай що пробував робити. Тут ніхто не напише за тебе програму з нуля. Тим більше форум трошки не тої тематики. Для такого є спеціальні форуми, наприклад sources.ru. Але й там прийдеться попрацювати самому трохи.
Ще й назва теми не відповідає проблемі. Модератори будуть сваритись  :D
Якщо в голову прийшла ідея - головне щоб вона знайшла дорогу до мозку між цими банками та склянками...

user_lol

А власне в чому проблема написання програми? Є велика к-ть готових функцій для роботи з рядками, які повністю вирішують поставлену задачу.

YuGa-92

#3
Цитата: user_lol від 13 Вересень 2012, 22:00:03А власне в чому проблема написання програми?
Мені здається що просто комусь лінь написати своє домашнє завдання ;)
Як такої проблеми тут дійсно немає. В загальному вигляді має бути щось таке: підключаємо бібліотеки з потрібними функціями -> відкриваємо файл на читання-> за допомогою функцій рахуємо кількість рядків, пропускаючи стрічки між кодовими словами та пусті стрічки за допомогою операторів розгалуження.
Якщо в голову прийшла ідея - головне щоб вона знайшла дорогу до мозку між цими банками та склянками...

PROFessoR

Наброси є!
вечером скину,они на домашнем компе.

вот, но он рерабочий

#include <windows.h>
#include <conio.h>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
/*    SetConsoleCP(1251);
SetConsoleOutputCP(1251);

char name[255], mass[255];
    cout << "Входной файл: \n";
    gets(name);
    ifstream infile("D:\infile.txt", ios::in);

    while(true)
    {
        if(infile.getline(mass, strlen(mass)));
        else break;
        puts(mass);
    }
infile.close();*/
void FRead(int num)
{
    char str_1[79];
    FILE *f;
    int count=0,b,start=0;
    int n,k;

    textcolor(BLACK);
    clrscr();
   
    f=fopen("ПУТЬ_К_ФАЙЛУ:\НАЗВАНИЕ_ФАЙЛА","r");
    while(!feof(f))
    {
        fgets(str_1,79,f);
        count ++;
    }
    fclose(f); 
mitka4:
    f=fopen("ПУТЬ_К_ФАЙЛУ:\НАЗВАНИЕ_ФАЙЛА","r");
    clrscr();

    b=0;
    int y = 4;
    {
    if(start < 0)
            start = 0;
       

         if (f == NULL)
         {
             gotoxy(1,y);
             cout<<"File not found!";
         }
         else
         {
                m1:
                while(!feof(f))
                {
                        if(b<start)
                        {
                            fgets(str_1,80,f);
                            b++;
                            goto m1;
                        }
                        fgets(str_1,80,f);
                        gotoxy(1,y);
                        puts(str_1);
                        y++;
                        if(y>22)
                        {
                            break;                         
                        }                       
                }
                fclose(f);
            }
    }

   
    command:
    asm{
        mov ah,0
        int 16h
    }

    up:
    asm{
        cmp ah,48h
        jne down
        dec start
        jmp mitka4
    }

    down:
    asm{
        cmp ah,50h
        jne mitka6
        inc start
        jmp mitka7
    }
   
    mitka7:
    if(start + 19 > count)
    {
        start --;
        goto mitka4;
    }
    else goto mitka4;
               
    mitka6:
    char num4 = getch();
    switch(num4)
    {
        case '1' : exit(0);
        default  : goto mitka4;
    }
}

//_getch();
return 0;
}

PROFessoR

эти исходники я взяты с разных книг, почти то что нужно для решения только если б кто подправил

//Р11-17.CPP - чтение текстового файла с помощью операции >>
#include <stdlib.h>  // Для функции exit()
#include <fstream.h> // Для файловых потоков
const int lenName 13; // max длина имени файла
// Длина вспомогательного массива:
const int lenString = 60;

void main ()
{ char source[lenName]; // Массив для имени файла
cout << "\n Введите имя исходного файла: ";
cin >> source;
ifstream inFile; // Входной файловый поток
// Открыть файл source и связать его с потоком inFile:
inFile.open(source);
if (!inFile) // Проверить правильность открытия файла
{ cerr << "\n Ошибка при открытии файла " << source;
exit (l); // Завершение программы
}
// Вспомогательный массив для чтения:
char string[lenString];
char next;
cout << "\n Текст файла:\n\n";
cin.get(); // Убирает код иэ потока cin
while(1) // Неограниченный цикл
{ // Ввод из файла одного слова до пробельного
  // символа либо EOF:
inFile >> string;
// Проверка следующего символа:
next = inFile.peek();
// Выход при достижении конца файла:
if (next == EOF) break;
// Печать с добавлением разделительного пробела:
cout << string << " ";
if (next == '\n') // Обработка конца строки
{ cout << '\n';
// 4 - смещение для первой страницы экрана:
static int i = 4;
// Деление по страницам до 20 строк каждая:
if (!(++i % 20))
{ cout << "\nДля продолжения вывода "
"нажмите ENTER.\n" << endl;
cin.get();
}
}
}
}

Результат выполнения программы - постраничный вывод на экран текстового файла,  имя которого набирает на клавиатуре пользователь по "запросу" программы.  Размер страницы - 20 строк. В начале первой страницы - результат диалога с пользователем и поэтому из файла читаются и выводятся только первые 16 строк.


_________________________________________________________________________________________________________
Следующая программа читает текстовый файл и разделяет его на две части - строки, не содержащие последовательности из двух символов '//',  и строки, начинающиеся такой парой символов. Иначе говоря, эта программа позволяет удалить из исходного текста программы на языке Си++ комментарии,  начинающиеся парой символов '//' и заканчивающиеся признаком конца строки '\n'. В программе определены два выходных потока outtext и outcom,  связанные соответственно с создаваемыми заново файлами text.cpp и comment. Имя входного файла с текстом анализируемой программы на языке Си++ определяет
(вводит с клавиатуры) пользователь. С этим файлом "связывается" функцией ореn() входной поток inFile.
Для проверки безошибочного открытия файлов проверяются значения выражений (!имя потока). При истинности результата вызывается вспомогательная функция errorF().
Вспомогательная переменная int len, позволяет проследить за необходимостью перехода к новой строке в потоке outtext, если во входном потоке inFile обнаружена  пара символов '//'. Символы входного потока последовательно читаются в переменную simb и выводятся в нужный выходной поток. Если не встречен символ '/',  то все просто - вывод идет в поток outtext. Так как обнаружение во входном отдельного символа '/' не есть признак начала комментария, то в этом случае  анализируется следующий символ, читаемый из входного потока в переменную next. Если next имеет значение то это начало комментария, и последующий вывод нужно  вести в поток outcom, предварительно "закрыв" строку в потоке outtext символом '\n'. Комментарии в тексте программы поясняют остальные детали алгоритма.


//р11-18.СРР - выделение комментариев из текста на Си++;
// посимвольные чтение и запись из текстового файла
#include <stdlib.h>
#include <fstream.h>
void errorF(char *ss) // Вспомогательная функция
{ cerr << "\nОшибка при открытии файла" << ' " <<
ss << '\n';
exit(1);
}
const int lenName << 23; // Длина массива для имени файла
void main()
{ char progName[lenName]; // Массив для имени файла
cout << "\n Введите полное имя анализируемой программы: ";
cin >> progName;
ifstream inFile; // Входной поток cвязываем входной поток с файлом программы:
inFile.open(progName);
if (!inFile) errorF(progName);
char simb, last, next; // Вспомогательныe переменные
ofstream outtext, outcom; // Два выходных потока // Параыанкая для вычисления длим строк лрограмш:
int len = 0;
outtext.open("text.cpp",ios::ate);
if (!outtext) errorF("text.cpp");
outcom.open("comment",ios::app);
if (!outcom) errorF("comment");
while (inFile.get(simb)) // Читает символы до EOF
{ len++; // Длинa очередной строки программы
if (simb == '\n')
len = 0; // Начнется новая строка программы
if (simb != '/') // это не начало комментария
// Вывод символа строки программы:
outtext.put(simb);
else
// Когда simb == '/' - возможно начало комментария
{ // Проверка на EOF:
if (!inFile.get(next)) break;
if (next == '/')
{ // Теперь уже точно комментарий
if (len != 1)
// "Закрываем" строку программы:
outtext.put('\n');
outcom.put(simb);
outcom.put(next);
// Цикл до конца комментария, т.е. до конца строки:
do
{// Чтение символа ив файла:
inFile.get(siab);
// Запись символа в поток: outcoa.put(aiab);
} while (simb!='\n');
}
else
// Вывод символов, не входящих в комментарий:
{ outtext.put(simb);
outtext.put(next);
}
}
}
}