Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 02.06.2022
Сообщений: 3
1

Нужно разделить все строки файла на 2 подстроки +- одного размера не разрывая слова

02.06.2022, 16:23. Показов 949. Ответов 2
Метки #c (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно разделить все строки файла на 2 подстроки +- одного размера не разрывая слова.
У меня пока получился код, который может разделить только 1-ю строку, а вот как сделать со всеми мне уже не понятно, количество строк неизвестно.
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
#define N 256
 
 
void Task()
{
    system("cls");
    printf("\nЗадание: Разбить каждую строку на две строки ");
    printf("\nприблизительно одного размера,не разрывая слова.");
    getch();
}
 
 
int process(char *Infile,char *Outfile)
{
    char line[3][N];
    int flag, flagl2 = 0;
    FILE *fp1, *fp2;
    
    if ((fp1 = fopen(Infile, "r")) == NULL)
    {
        perror("\nОшибка открытия файла чтения");
        getch();
        return 1;
    }
 
    fgets(line[0],N-1,fp1);
    int len = strlen(line[0]);
    int j = 0;
    for (int i = 0; i < len; i++)
    {
        if (line[0][i] == ' ' || flagl2 == 1)
            flag = 1;
        else
            flag = 0;
        if (i <= len/2 || flag == 0)
            line[1][i] = line[0][i];
        else
        {
            line[2][j++] = line[0][i+1];
            flagl2 = 1;
        }
 
    }
 
 
    if ((fp2 = fopen(Outfile, "w")) == NULL)
    {
        perror("\nОшибка открытия файла записи");
        getch();
        return 1;
    }
    fprintf(fp2, "%s\n",line[1]);
    fprintf(fp2, "%s\n",line[2]);
 
    fclose(fp1);
    fclose(fp2);
 
    getch();
}
 
void Menu()
{
 
    system("cls");
    printf("\n\nF1 - Вывести условие");
    printf("\nF2 - Выполнить");
    printf("\nF3 - Завершение программы");
 
}
 
int main()
{
    int Over = 0, button;
    char *Infile = "D://Input.txt";
    char *Outfile = "D://Output.txt";
    while(!Over)
    {
        Menu();
        getch();
        button = getch();
 
        system("cls");
        switch(button)
        {
            case 59:
                Task();
                break;
 
            case 60:
                process(Infile, Outfile);
                break;
 
            case 61:
                Over = 1;
                break;
 
        }
    }
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2022, 16:23
Ответы с готовыми решениями:

Разделить строки файла на подстроки по делиметру
Как сравнить строки в файле? И как учесть что если написано скажем ch3 - :kolichestvo molekyl =...

Разделить строки файла на подстроки и поменять местами
Пару дней назад начал учить python но первый нужный скрипт никак не получается) Содержание...

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

Нужно перекинуть из файла F1 в F2 строки, состоящие только из одного слова, и найти в F2 самое длинное слово
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; #include &lt;cstdlib&gt; using namespace...

2
590 / 413 / 135
Регистрация: 02.10.2008
Сообщений: 1,745
Записей в блоге: 1
02.06.2022, 18:58 2
Лучший ответ Сообщение было отмечено Chamm как решение

Решение

Чтение строк через fgets() зацикли до тех пор, пока fgets() не вернёт NULL.
Это блок кода от строки 31 до 48.
Например:
C
1
2
3
4
5
6
7
8
9
10
/*выходной файл надо открыть заранее*/
/*тут твой код от 51й до 56й строки*/
 
while(fgets(line[0],N-1,fp1) != NULL)
{
/*  твой код от 31й до 48й строки*/
 
/*и записать результат считанной строки*/
/*твой код строки 57 и 58*/
}
На вскидку примерно так. Пробуй - будут проблемы - пиши, только приводи тот исходник с которым проблемы - помогал так, на вскидку... Может есть ошибки у тебя, может и я что проворонил в логике...
0
0 / 0 / 0
Регистрация: 02.06.2022
Сообщений: 3
02.06.2022, 19:12  [ТС] 3
Да, спасибо, помогло, пришлось еще добавить очистку в конце цикла и теперь все работает как надо)
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
108
109
110
111
112
113
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
#define N 256
 
 
void Task()
{
    system("cls");
    printf("\nЗадание: Разбить каждую строку на две строки ");
    printf("\nприблизительно одного размера,не разрывая слова.");
    getch();
}
 
 
int process(char *Infile,char *Outfile)
{
    char line[3][N];
    FILE *fp1, *fp2;
 
    if ((fp1 = fopen(Infile, "r")) == NULL)
    {
        perror("\nОшибка открытия файла чтения");
        getch();
        return 1;
    }
 
        if ((fp2 = fopen(Outfile, "w")) == NULL)
    {
        perror("\nОшибка открытия файла записи");
        getch();
        return 1;
    }
    while(fgets(line[0],N-1,fp1) != NULL)
    {
        int flag, flagl2 = 0;
        int len = strlen(line[0]);
        int j = 0;
 
 
        for (int i = 0; i < len; i++)
        {
            if (line[0][i] == ' ' || flagl2 == 1)
                flag = 1;
            else
                flag = 0;
            if (i <= len/2 || flag == 0)
                line[1][i] = line[0][i];
            else
            {
                line[2][j++] = line[0][i+1];
                flagl2 = 1;
            }
 
        }
 
        fprintf(fp2, "%s\n",line[1]);
        fprintf(fp2, "%s\n",line[2]);
        for (int i = 0; i <= N; ++i)
        {
            line[1][i] = 0;
            line[2][i] = 0;
        }
    }
    fclose(fp1);
    fclose(fp2);
 
    getch();
}
 
void Menu()
{
 
    system("cls");
    printf("\n\nF1 - Вывести условие");
    printf("\nF2 - Выполнить");
    printf("\nF3 - Завершение программы");
 
}
 
int main()
{
    int Over = 0, button;
    char *Infile = "D://Input.txt";
    char *Outfile = "D://Output.txt";
    while(!Over)
    {
        Menu();
        getch();
        button = getch();
 
        system("cls");
        switch(button)
        {
            case 59:
                Task();
                break;
 
            case 60:
                process(Infile, Outfile);
                break;
 
            case 61:
                Over = 1;
                break;
 
        }
    }
 
    return 0;
}
0
02.06.2022, 19:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2022, 19:12
Помогаю со студенческими работами здесь

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

Скопировать из одного файла в другой все строки, не содержащие слова, начинающиеся на одну букву
1) Скопировать из файла F1 в файл F2 все строки, которые не содержат слова, начинающиеся на одну...

Разделить все слова строки на три типа – идентификаторы, целые десятичные числа со знаком и остальные слова
1. Дана строка. Написать программу, разделяющую все слова строки на три типа – идентификаторы,...

Запись определённой подстроки последней строки одного текстового файла в другой
Здравствуйте. Есть текстовый файл, log.txt следующего вида: xxx 11111 yyy zzz...

Как разделить текстовый файл на части, не разрывая слов
Как разделить книгу(текстовый файл 335 кб) на страници(текстовые файлы &quot;1.txt&quot;, &quot;2.txt&quot;, &quot;3.txt&quot;,...

Нужно удалить все подстроки из исходной строки
Добрый день! Задача &quot;Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если...


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

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