0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 4
1

C++ Форматный файловый ввод-вывод

23.12.2014, 14:20. Показов 1003. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте))), как

1.Разместить текст в несколько столбцов, так чтоб n-е слово i-ой строки размещалось под n-им словом i+1-ой строки
2.В каждой строке поменять местами соседние слова.

Пример :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char filename[80];     /* имя файла */
char bu1[81], bu2[81]; /* входной и выходной буферы */
 
int main(int an, char *av[]) {
 char *b1, *b2; /* текущие указатели в буферах */
 char os;       /* предыдущий символ */
 FILE *inf, *outf;  /* файловые переменные */
 int  l,        /* текущая длина строки */
      lmax,     /* максимальная длина строки */
      lm;       /* макс. длина строки (рабочая) */
 int  nw,       /* количество слов */
      nb;       /* количество пробелов */
 
  /* проверка параметров */
  if (an<2) {
    printf("Не задан параметр вызова\n");
    exit(0);
    }
  strcpy(filename,av[1]);
  /* открытие файлов */
  if ((inf=fopen(filename,"r"))==NULL) {
    printf("Невозможно открыть файл: %s\n",filename);
    exit(0);
    }
  if ((outf=fopen("TMP","w"))==NULL) {
    printf("Невозможно создать файл: TMP\n");
    exit(0);
    }
  /* первая фаза - определение максимальной длины */
  /* чтение файла строка за строкой */
  for (lmax=0; fgets(bu1,80,inf)!=NULL; ) {
    /* удаление из строки лишних пробелов 
       и определение количества слов */
    for (os=' ',nw=0,b1=bu1, b2=bu2; *b1; os=*b1++) {
      switch(*b1) {
        case 0xA: /* символ новой строки удаляется */
          break;
        case ' ': /*2-й пробел подряд удаляется */
          if (os==' ') break;
        default: /* остальные символы переписываются */
          if (os==' ') nw++; /* начало слова */
          *b2++=*b1;
          break;
          }
        }
    /* удаление пробела в конце */
    if ((b2>=bu2)&&(*(b2-1)==' ')) *(b2-1)=0;
    else *b2=0;
    /* вывод в файл количества слов и строки */
    fprintf(outf,"%02d %s\n",nw,bu2);
    /* определение максимальной длины */
    l=strlen(bu2);
    if (l>lmax)lmax=l;
    }
  fclose(inf);
  fclose(outf);
 
  /* вторая фаза - окончательная обработка */
  /* открытие промежуточного файла */
  if ((inf=fopen("TMP","r"))==NULL) {
    printf("Невозможно открыть файл: TMP\n");
    exit(0);
    }
  /* открытие выходного файла out.txt */
  if ((outf=fopen("out.txt","w"))==NULL) {
    printf("Невозможно открыть файл: %s\n","out.txt");
    exit(0);
    }
  /* чтение файла строка за строкой */
  while (fgets(bu1,80,inf)!=NULL) {
    /* виделение количества слов и текста */
    bu1[2]=0; nw=atoi(bu1);
    b1=bu1+3;
    l=strlen(b1)-1; b1[l]=0;
    /* если слов 1 или 0 - строка остается как есть  */
    if (--nw>0) {
      /* определение количества пробелов между словами */
      nb=(lmax-l)/nw;
      for (lm=lmax, b2=bu2; *b1; l--,lm--) {
        /* перезапись символов на выход */
        if ((*b2++=*b1++)==' ') {
          /* если конец слова - добавить пробели */
          for (; nb; nb--) { lm--; *b2++=' ';}
          /* коррекция количества пробелов между словами */
          if (--nw) nb=(lm-l)/nw;
          }
        }
      /* признак конца строки в выходном буфере */
      *b2=0;
      /* вывод в файл */
      fprintf(outf,"%s\n",bu2);
      }
    /* вывод строки, которая осталась без изменений */
    else fprintf(outf,"%s\n",b1);
    }
  fclose(inf);
 
  fclose(outf);
  /* уничтожение промежуточного файла */
  unlink("TMP");
 
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2014, 14:20
Ответы с готовыми решениями:

Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод
Добрый день! Помогите, пожалуйста, с программой. Программа считывает строку с клавиатуры и...

Форматный ввод / вывод в языке С ++ (Console Application)
Помогите пожалуйста, только начинаю учить C++ 1. Напишите инструкцию ввода и вывода значений чисел...

Поменять консольный ввод-вывод на файловый ввод-вывод
вот у меня калькулятор как мне сделать что б числа вводились из файла и результат записывался в...

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур
Добрый вечер)) У меня небольшой вопрос. Почему первые буквы (в названии книг) не выводит на экран?...

0
23.12.2014, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2014, 14:20
Помогаю со студенческими работами здесь

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод)
Как сделать чтобы список студентов выводился на экран в конце? #include&lt;iostream&gt; ...

Поиск в массиве структур по заданному полю и вывод в алфавитном порядке (файловый ввод/вывод)
Помогите с функцией void runFile() что бы с файла брал и выводил в алфавитном порядке список...

Вывод суммы в файл (файловый ввод/вывод)
Добрый день! Я пытался написать программу, которая должна вводить данные из файла №1, потом...

Форматный ввод/вывод: имя, второе имя или инициал, фамилия
Напишите программу, считывающую имя человека в таком формате: имя, второе имя или инициал, фамилия....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru