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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Табуляция 
:(
    Опции темы
Uter123
Дата 9.11.2015, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написать прграмму-обработчик текстовых файлов, которая создаёт текстовый файл, и в котором символы  табуляции, пропуски которые повторяются, и символы перевода строки(#13#10) были заменены пропуском, но с сохранением абзацов.Файл-источник , файл-премщик определить в командной строке сразу за исполнительным файлом.

Не могу доделать до конца, проблема с табуляцией и абзацами.

Код

#include "stdafx.h"
#include "iostream"
#include "stdio.h"
#include "conio.h"
using namespace std;

int main(int argc,char* argv[])
{
    FILE *retro, *etr;
    int i,j;
    retro=fopen("111.txt","r+");
    etr=fopen("atr.txt","w+");
    char x[80]=" ";
    if(retro==NULL)
    {
        cout<<"net faila"<<endl;
        exit(1);
    }
    cout<<"idet zapis vfile, nagmite enter...";
    while(!feof(retro))
    {
        fgets(x,80,retro);
        for(i=0;x[i]!='\0';i++)
        {
            if(x[i]=='\t'||x[i]=='\v'||x[i]==' ')
            {
                x[i]=' ';
                if(x[i+1]=='\t'||x[i+1]=='\v'||x[i+1]==' ')
                {
                    for(j=i;x[j]!='\0';j++)
                    {
                        x[i]=' ';
                        x[j]=x[j+1];
                    }
                }
            }
        }
        fputs(x,etr);
    }
    fclose(retro);
    _getch();
    return 0;
}


PM MAIL   Вверх
math64
Дата 10.11.2015, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



По заданию имена файлов задаются в командной строке:
Код

int main(int argc,char* argv[])
{
    FILE *retro, *etr;
    int i,j;
    if (argc < 3) {
       printf("Не заданы имена файлов\n");
       exit(1);
    }
    retro=fopen(argv[1],"r+");
    etr=fopen(argv[2],"w+");

Не путайте вывод на консоль в стиле C++ (cout <<) и в стиле C (getch())

Цикл в цикле с копированием остатка строки делать не обязательно:
Код

int j = 0; // j нужен после цикла
for(int i = 0; x[i] !='\0'; j++) { //i++ здесь не делаем, он модифицируется внутри цикла
    if(x[i] == ...) {
       x[j] = ' ';
       while (x[i] == ...) i++;
    } else {
       x[j] = x[i++]
    }
}
x[j] = '\0';

Что такое абзацы? отступ в начале строки? Тогда делай отдельный цикл, оспавляющий пробелы в начале строки.
PM   Вверх
feodorv
Дата 10.11.2015, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(math64 @  10.11.2015,  08:28 Найти цитируемый пост)
Что такое абзацы? отступ в начале строки?

Скорее всего, "\r\n\r\n", что задачу несколько усложняет.


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

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

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

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

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


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

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


 




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


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

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