Форум программистов, компьютерный форум CyberForum.ru

выравнивание по ширине - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Теория игр, массивы http://www.cyberforum.ru/cpp-beginners/thread229714.html
Есть задание (прикрепил его в виде файла к сообщению). Есть решение для 12-ого варианта на BORLANDC, у меня 2-ой. Я изменил в начале на: int matrix ={1,2,3,8,4,7,-1,5,-6} еще int mmax, mmin Дальше еще нужно что-нибудь менять или там алгоритм решения для всех общий? Решение для 12-ого варианта прикрепил к сообщению.
C++ условие для последовательности Подскажите, пожалуйста, каким должно быть условие для обратного порядка цифр в последовательности 123321123321? Не судите строго, мы только начали разбирать последовательности http://www.cyberforum.ru/cpp-beginners/thread229713.html
Строка символов C++
Здравствуйте, помогите пожалуйста с дополнительным вопросом по программе. По данному заданию написана программа Дана строка символов. Распечатать слова, отличные от последнего, оставив в каждом слове только первые вхождения каждой буквы. например: "Ptici preleteli vesna prichla" на экран он выводит "Ptic prelti vesna" Так вот, дополнительный вопрос заключается в следующем: надо...
Сложить два пятидесятизначных десятичных числа C++
Сложить два пятидесятизначных десятичных числа.Плиз помогите решеть,только в С,не в С++
C++ лабораторная работа http://www.cyberforum.ru/cpp-beginners/thread229664.html
Помогите, пожалуйста, составить программу для лабораторной. Дан вектор, состоящий из 10 вещественных элементов. Найти сумму положительных элементов, расположенных после первого отрицательного элемента. Предполагается, что первый отрицательный элемент не есть последний элемент массива и что среди элементов массива есть и положительные, и отрицательные элементы. Ввод/вывод – потоковый
C++ Вывести информацию Вывести информацию об объектах по заданному заказчику Выдает ошибку. Посмотрите в чем дело? подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
17.01.2011, 01:32     выравнивание по ширине
Считывает из файла, выводит на экран. Уж с выводом в файл-то справишься, надеюсь.
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
/*
  Выравнивание производить за счёт добавления между слов необходимого количества пробелов.
*/
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cstddef>
#include <cstring>
 
void AlignString(char *string, size_t align_size) {
  char *symbol = string + strlen(string) - 1;
  size_t number_of_words = 0;
 
  // убираем конечные пробелы и символ переноса
  if (*symbol == '\n')
    --symbol;
  while ((symbol != string) && (*symbol == ' '))
    --symbol;
  *(symbol + 1) = '\0';
 
  if (strlen(string) == 0 || strlen(string) == align_size)
    return;
 
  // считаем слова
  symbol = string + 1;
  while (*symbol != '\0') {
    if ((symbol[-1] != ' ') && (symbol[0] == ' '))
      ++number_of_words;
    ++symbol;
  }
 
  if (number_of_words < 1)
    return;
 
  // расчетные величины
  size_t string_length = strlen(string);
  size_t spaces_to_add_definitely = (align_size - string_length) /
                                     number_of_words;
  size_t additional_spaces = (align_size - string_length) % number_of_words;
 
  // дополнение пробелами междусловные интервалы
  symbol = string + 1;
  size_t current_word_number = 0;
  while (*symbol != '\0') {
    if ((symbol[-1] != ' ') && (symbol[0] == ' ')) {
      size_t spaces_to_add = spaces_to_add_definitely +
                            ((current_word_number < additional_spaces)? 1:0);
      char *move_pointer  = string + align_size;
      while (move_pointer - spaces_to_add + 1 != symbol)
        *(move_pointer--) = *(move_pointer - spaces_to_add);
      for (int i = 0; i < spaces_to_add; ++i)
        *(symbol++) = ' ';
      ++current_word_number;
    }
    ++symbol;
  }
}
 
int main(int argc, char *argv[]) {
  size_t string_buffer_size = 2048;
 
  FILE* input_file = fopen("/usr/share/doc/libqt4-test/copyright", "r");
  size_t maximum_string_length = 0;
 
  if (input_file == NULL) {
    printf("Error opening file.\n");
    return 1;
  }
 
  char *string_buffer = new char[string_buffer_size];
  // первое чтение файла -- вычисление максимальной длины строки.
  while (!feof(input_file)) {
    if (fgets(string_buffer, string_buffer_size, input_file)) {
      size_t string_length = strlen(string_buffer);
      if (string_length > maximum_string_length)
        maximum_string_length = string_length;
    }
  }
 
  printf("Debug: maximum string length = %d.\n", maximum_string_length);
  fseek(input_file, 0, SEEK_SET);
 
  while (!feof(input_file)) {
    if (fgets(string_buffer, string_buffer_size, input_file)) {
      AlignString(string_buffer, maximum_string_length);
      printf("%s\n", string_buffer);
    }
  }
 
  delete [] string_buffer;
  fclose(input_file);
  return 0;
}
 
Текущее время: 15:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru