Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C (СИ) Напечатать последнюю из самых коротких строк текстового файла https://www.cyberforum.ru/ c-beginners/ thread1976759.html
Подскажите пожалуйста текст программы, которая печатает последнюю из самых коротких строк текстового файла. Текстовый файл рандомный. Добавлено через 3 часа 6 минут Вот, что получилось. Компилятор ругается на строку с открытием файла по заданному адресу. И еще не проработала момент с выводом именно ПОСЛЕДНЕЙ короткой строки. Подскажите, как это сделать:) #include <stdio.h> #include...
Разбить код на функции C (СИ)
Здравствуйте. Помогите, пожалуйста, разбить код на функции. Допустим, есть структура. #include <stdio.h> #include <conio.h> #include <stdlib.h> #define N 2 typedef struct WORLDCUP{ int year; char host;
C (СИ) Отсортировать структуру по одному из полей https://www.cyberforum.ru/ c-beginners/ thread1976723.html
Не получается сделать сортировку, уже много чего перепробовал, помогите пожалуйста #define _CRT_SECURE_NO_WARNINGS #include <sys/stat.h> #include <memory.h> #include <fcntl.h> #include <io.h> #include <stdio.h> #include <string.h> #include <conio.h>
C (СИ) Считать из текстового файла предложения в односвязный список https://www.cyberforum.ru/ c-beginners/ thread1976693.html
Считать из текстового файла предложения в односвязный список. Переставить в первых и последних словах предложений в списке попарно слева и справа символы. Результат вывести в файл. Подскажите как реализовать данную перестановку символов в первом и последнем слове ( в данный момент использовал функцию strev(), которая изменяет на обратную последовательность. И как сделать считывание предложений...
C (СИ) Переполнение массива. Run-Time Check Failure #2
Добрый день. Я написал программу поиска всех циклов в ориентированном графе, но у меня ошибка "Run-Time Check Failure #2 - Stack around the variable 'q' was corrupted." Где то в фунции seekCykle. Смотрел пошагово но не увидел ошибки . Помогите пожалуйста :( #include <stdio.h> #include <string.h> #include <stdlib.h> #include <windows.h> #define N 5
C (СИ) пожалуйста найти ошибку https://www.cyberforum.ru/ c-beginners/ thread1976633.html
z1=(m-1)^2*sqrt(m+n)-(n-1)^2*sqrt(m-n) z2=nsqrtm(m)-msqrt(n)/(n+m) #include<stdio.h> #include<math.h> int main() { float z1,z2,m,n;
C (СИ) Загрузка двоичных значений из текстового файла в массив Не получается реализовать данную задачу. Во всех элементах массива последнее значение из файла. #include <conio.h> #include <stdio.h> #define MAX_ELEMENTS 40 #define MAX_LENGTH 40 void fileloader(char *filepath, char **resultArray){ https://www.cyberforum.ru/ c-beginners/ thread1976622.html Собрать все положительные элементы ниже побочной диагонали C (СИ)
Всем привет, прошу помощи по сортировке положительных элементов ниже побочной диагонали. Задание: Дана матрица целых чисел. Собрать все положительные элементы ниже побочной диагонали. #include <stdio.h> #include <locale.h> int main() { setlocale(LC_ALL, "Rus"); int i, j, a;
C (СИ) Проверить, упорядочены ли элементы списка по алфавиту Огромная просьба помогите с написание кода для задачки: Необходимо написать функцию, которая проверяет, упорядочены ли элементы списка по алфавиту. https://www.cyberforum.ru/ c-beginners/ thread1976550.html C (СИ) Работа с матрицей. Седловые точки матрицы Учусь в 7ом IT классе. Сейчас проходим двумерный массивы (матрицу). Я справился со всеми задачами контеста "двумерные массивы" однако возникла проблема. Одна задача из 20 тестов проходит только 16. Задача называется "седловые точки матрицы". ссылка на задачу в пдф... https://www.cyberforum.ru/ c-beginners/ thread1976524.html
C (СИ) Объявить необходимые переменные и написать инструкции ввода
Объявить необходимые переменные и написать инструкции ввода исходных данных для программы вычисления дохода по вкладу. Предполагается, что процентную ставку программа определяет на основе данных о сумме и сроке вклада.
C (СИ) написать инструкцию https://www.cyberforum.ru/ c-beginners/ thread1976491.html
Написать инструкцию вывода значений переменных a,b иc (типаfloat) с пятью цифрами в целой части и тремя — в дробной. Значения должны быть выведены в виде:a =значение b = =значение c =значение. что то не получается у меня
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
11.05.2017, 20:25 0

Выровнять строки в файле по правой и левой границе, вставляя между словами пробелы - C (СИ) - Ответ 10424456

11.05.2017, 20:25. Показов 1644. Ответов 10
Метки (Все метки)

Ответ

Цитата Сообщение от kirill2536 Посмотреть сообщение
Как это реализовать без использования динамической памяти?
Использовать статический массив достаточного размера.

Добавлено через 2 часа 55 минут
Из условия задачи непонятно, что делать со строками, длина которых больше заданной ширины.

Возможны два варианта:
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
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <assert.h>
#include <stdlib.h>
 
#define MAXWIDTH 120
#define MAXWORDS MAXWIDTH/2
 
bool justify_string(char *src, char *dst, int width);
void justify_file(const char *srcFileName, const char *dstFileName, int width);
 
int main()
{
    justify_file("in.txt", "out.txt", 80);
}
 
bool justify_string(char *src, char *dst, int width)
{
    assert(width <= MAXWIDTH);
    assert(src != NULL && dst != NULL);
 
    static char wordList[MAXWORDS][MAXWIDTH+1];
 
    int i;
    int totalWordsLength = 0; // суммарная длина всех слов
 
    char *word = strtok(src, " "); // выделяем первое слово
 
    for (i = 0; word != NULL && i < MAXWORDS; i++)
    {
        totalWordsLength += strlen(word);
        if (totalWordsLength + i > width)
            return false;
 
        strcpy(wordList[i], word);
        word = strtok(NULL, " "); // выделяем следующее слово
    }
 
    const int numberOfWords = i;
 
    if (word != NULL || numberOfWords < 2)  return false;
 
    const int totalSpacesLength = width - totalWordsLength;
    const int numberOfSpaces = numberOfWords-1;
    const int minimumSpaceLength = totalSpacesLength / numberOfSpaces;
    const int additionalSpaces = totalSpacesLength - minimumSpaceLength*numberOfSpaces;
 
    int spaceLength = minimumSpaceLength + 1;
    i = 0;
 
    for (int iWord = 0; iWord < numberOfWords; iWord++)
    {
        int j = 0;
        // копируем слово в выходну строку
        while (wordList[iWord][j] != '\0')
            dst[i++] = wordList[iWord][j++];
 
        if (iWord == additionalSpaces)
            --spaceLength;
 
        if (iWord < numberOfSpaces) // если это не последнее слово
        {
            // добавляем нужное число пробелов после слова
            for (int k = 0; k < spaceLength; k++)
                dst[i++] = ' ';
        }
    }
 
    assert(i == width);
    dst[i] = '\0';
    return true;
}
 
void justify_file(const char *srcFileName, const char *dstFileName, int width)
{
    FILE *in  = fopen(srcFileName, "r");
    FILE *out = fopen(dstFileName, "w");
 
    if (!in || !out) {
        puts("Error opening file.");
        exit(1);
    }
 
    const int BufLength = 200;
    char s[BufLength], s2[BufLength];
    char justifiedString[MAXWIDTH+1];
 
    while (fgets(s, BufLength, in))
    {
        // сохраняем копию строки, поскольку функция strtok портит строку
        strcpy(s2, s);
 
        bool success = justify_string(s, justifiedString, width);
 
        if (success)  fputs(justifiedString, out);
        else          fputs(s2, out);
    }
 
    fclose(in);
    fclose(out);
}


Вернуться к обсуждению:
Выровнять строки в файле по правой и левой границе, вставляя между словами пробелы C (СИ)
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2017, 20:25
Готовые ответы и решения:

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

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

Довести длину строки до заданной, вставляя пробелы между словами
Довести длинну строки до заданной вставляя пробелы меду словами . Напечатать все слова которые...

Функция доводит длину строки до заданной, вставляя пробелы между словами
Помогите с прогой на С Функция доводит длину строки до заданной, вставляя пробелы между словами

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

Функция доводит длину строки до заданной, вставляя пробелы между словами
Функция доводит длину строки до заданной, вставляя пробелы между словами. слово может складатса с...

Убрать в текстовом файле ненужные пробелы, оставив между словами по одному, между предложениями по два.
Мое задание: убрать в текстовом файле ненужные пробелы, оставив между словами по одному, между...

Движение квадрата от левой к правой границе окна программы и обратно
создать приложение, которое демонстрирует движение квадрата от левой к правой границе окна...

Удалить пробелы, стоящие между первым вторым словами, а также между двумя последними словами
Удалить пробелы, стоящие между первым вторым словами, а также между двумя последними словами, на...

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