Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 30.05.2023
Сообщений: 4

Переписать строки файла, перенося при этом в конец каждой строки все цифры с сохранением взаимного исходного порядка

30.05.2023, 17:04. Показов 4676. Ответов 75
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Содержимое текстового файла INPUT.TXT, разделенного на строки, переписать
в текстовый файл OUTPUT.TXT, перенося при этом в конец каждой строки все
входящие в него цифры с сохранением взаимного исходного порядка. Для
работы со строками использовать динамический массив.
Пример:
INPUT.TXT
Лдвао1лр43лро26ло78
Выоа234лор980
OUTPUT.TXT
Лдваолрлроло1432678
Выоалор234980

Обязательное использование именно динамического массива
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2023, 17:04
Ответы с готовыми решениями:

Составное текстового файла f, разделенное на строки, переписать в текстовый файл g, перенося при этом в конец каждой строки все цифры, входящие в него
Составное текстового файла f, разделенное на строки, переписать в текстовый файл g, перенося при этом в конец каждой строки все цифры,...

Перенести все цифры в конец каждой строки с сохранением взаимного исходного порядка (файловый ввод/вывод)
Содержимое текстового файла INPUT.TXT, разделенного на строки, переписать за один проход по файлу в текстовый файл OUTPUT.TXT, перенося при...

Переписать строки в файл, перенося при этом в конец каждой строки все входящие в него цифры
Содержимое текстового файла f, разделенного на строки, переписать в текстовый файл g, перенося при этом в конец каждой строки все ...

75
01.06.2023, 17:01
Студворк — интернет-сервис помощи студентам

Не по теме:


Да, хорошо когда язык поддерживает итераторы и функциональное программирование

Rust
1
2
3
4
5
6
7
8
9
10
11
12
use std::char;
 
fn main() {
 
    let string = "Лдвао1лр43лро26ло78";
    let chars = string.chars().filter(|&x| char::is_alphabetic(x)).collect::<String>(); 
    let numbers = string.chars().filter(|&x| char::is_digit(x, 10)).collect::<String>(); 
    
    println!("{}", chars + &numbers);
   
    // => Лдваолрлроло1432678
}

0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
01.06.2023, 17:34
Цитата Сообщение от Гай Посмотреть сообщение
Да, хорошо когда язык поддерживает итераторы и функциональное программирование
Такая реализация на C выглядела бы почти так же компактно. Но это не интересная ленивая и тормозная реализация.

Это не говоря уже о том, что основной объем приведенных решений на С - это файловый ввод-вывод.

---

Цитата Сообщение от Наталья8 Посмотреть сообщение
Входного файла не нашёл - делает выходной.....
Да, верно, хорошее замечание. Не очень "чистое" поведение программы. Надо было не жалеть строк.

C
1
2
3
4
5
6
7
8
9
  FILE *f_in = NULL, *f_out = NULL;
 
  f_in = fopen("input.txt", "rt");
  if (f_in == NULL)
    goto end;
 
  f_out = fopen("output.txt", "wt");
  if (*f_out == NULL)
    goto end;
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вот так будет консепсипсуальней....
Да, целая отдельная дополнительная "консепсипсуальность" появилась. Все проблемы с ресурсами обрабатываются единообразно через goto end, вот для f_in внезапно заведен отдельный if с блоком размером на всю программу....

А вот тут вы уже внесли в позаимствованный у меня подход грубую ошибку. Вот так делать нельзя:

C
1
2
3
4
5
6
7
    FILE *f_out = fopen("output.txt", "wt");
    if ( f_out == NULL)goto end;
 
    size_t n_buffer = 1024; char *buffer = NULL;
    buffer = (char *)malloc(n_buffer);
    if (buffer == NULL)
        goto end;
Если f_out открыть не удастся, то после перехода по goto end переменная buffer будет видна в конце программы, но будет содержать мусор. Если вы хотите пользоваться предложенной идиомой с goto end, то все "ресурсные" переменные должны быть объявлены (с "пустым" инициализатором) еще до самого первого goto end.

Цитата Сообщение от Наталья8 Посмотреть сообщение
Заработало.... (Ни чего не менял)

Я ошибся извиняюсь.... (менял)
То есть вы решили исправить условие в одном из моих assert-ов на противоположное (противоположное, Карл!) и некоторое время недоумевали, почему он внезапно начал падать?

---

Цитата Сообщение от Алексей1153 Посмотреть сообщение
хм, таки есть в C getline
В С никакого getline нет.

Добавлено через 2 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
Другое дело - стоило об этом упомянуть, мелкомягким чужие стандарты - не указ...
Это да... У меня еще c восьмидесятых завалялся занимательнейший стандартик на противовесы театральных декораций. Но Майкрософт - ни в какую... Однако я не теряю надежды. Good things come to those who wait.
1
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
01.06.2023, 17:43
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
стандартик на противовесы театральных декораций
в Windows 13 введут
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12844 / 7593 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
01.06.2023, 17:54
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У меня еще c восьмидесятых завалялся занимательнейший стандартик на противовесы театральных декораций. Но Майкрософт - ни в какую.
Ну если уж Ваши(!!!) стандарты не принимают, у POSIX шансов вообще 0, куда ему...
0
01.06.2023, 18:13

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это не говоря уже о том, что основной объем приведенных решений на С - это файловый ввод-вывод.
я это понимаю, но не стал об этом писать, так как это не по теме.
а так вся прога на расте будет выгладить так

Rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::char;
use std::fs;
use std::io;
 
fn main() -> io::Result<()> {
    
let input = fs::read_to_string("/tmp/input.txt")?;
    
let mut output = fs::OpenOptions::new()
    .append(true)
        .open("/tmp/output.txt")?;
 
for line in input.lines() {
    
    let chars = line.chars().filter(|&x| char::is_alphabetic(x)).collect::<String>(); 
    let numbers = line.chars().filter(|&x| char::is_digit(x, 10)).collect::<String>(); 
    io::Write::write(&mut output, format!("{}{}\n", chars, numbers).as_bytes())?;
   
    }
    
    Ok(())
 
}
Но у Си есть свои преимущества. Так расту, на мой взгляд, не хватает ряда низкоуровневых функций как в С

0
207 / 58 / 19
Регистрация: 18.02.2018
Сообщений: 258
01.06.2023, 23:33
> Обязательное использование именно динамического массива

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

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SIZE 8192
 
static void
fclose_cleanup (FILE ** f)
{
    if (*f != NULL)
        fclose(*f);
}
 
static void
line_free (char ** line)
{
    if (*line != NULL)
        free(*line);
}
 
int
main (void)
{
    __attribute__ ((cleanup (fclose_cleanup))) FILE * in = NULL;
    __attribute__ ((cleanup (fclose_cleanup))) FILE * out = NULL;
    __attribute__ ((cleanup (line_free))) char * line = NULL;
    char * ptr;
    size_t len = 0, dq, i;
    char buf;
 
    in = fopen("input.txt", "r");
    if (in == NULL)
        return -1;
    out = fopen("output.txt", "w");
    if (out == NULL)
        return -1;
    while (1) {
        if (len == 0)
            line = malloc(sizeof(char) * SIZE);
        if (fgets(line + len, SIZE, in) == NULL) {
            if (feof(in))
                break;
            return -1;
        }
        len = strlen(line);
        if (*(line + len - 1) == '\n') {
            dq = 0;
            for (ptr = line; *ptr != '\n'; ptr++)
                if (*ptr >= '0' && *ptr <= '9')
                    dq++;
                else
                    if (dq > 0) {
                        for (i = 0; i < dq; i++) {
                            buf = *(ptr - i);
                            *(ptr - i) = *(ptr - i - 1);
                            *(ptr - i - 1) = buf;
                        }
                        ptr -= i;
                        dq = 0;
                    }
            fprintf(out, "%s", line);
            len = 0;
            free(line);
        }
        else
            line = realloc(line, len + 0xdeadbeef);
    }
 
    return 0;
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
02.06.2023, 00:23
Цитата Сообщение от ksyrx Посмотреть сообщение
line = realloc(line, len + 0xdeadbeef);
???
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,370
02.06.2023, 00:35
Вот нагуглил. Круто до невозможности.


Но это что то дохрена...
1
 Аватар для CoderHuligan
1754 / 1020 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
02.06.2023, 11:55
Всегда считал, что ассерты надо расставлять в режиме дебаггинга, а в готовом коде их быть не должно. Может я не прав?
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
02.06.2023, 12:08
CoderHuligan, в релизной конфигурации они обычно ничего не делают https://en.cppreference.com/w/c/error/assert
0
 Аватар для CoderHuligan
1754 / 1020 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
02.06.2023, 13:07
Цитата Сообщение от Алексей1153 Посмотреть сообщение
в релизной конфигурации они обычно ничего не делают
Но листинг загромождают.
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
02.06.2023, 13:47
CoderHuligan, бумагу экономить тут не требуется, к счастью
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,370
02.06.2023, 13:49
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вот так будет консепсипсуальней....
По уму отлаживать... На след. утро. Открыл посмоторел.
И вечерком ещё открыл. Вот тогда будет консепсипсуальней.
А goto, я обычно не пользуюсь. Это я у вас увидел.
Реально надо, или так, или эдак...
assert(fin); --- интересно... Я обычно printf() вставляю.(не вышибает)
0
 Аватар для CoderHuligan
1754 / 1020 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
02.06.2023, 13:58
Цитата Сообщение от Алексей1153 Посмотреть сообщение
бумагу экономить тут не требуется, к счастью
При изучении кода все эти ассерты только раздражают и отвлекают внимание и отнимают время на его осмысление.
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
02.06.2023, 14:02
CoderHuligan, вроде нет
0
 Аватар для CoderHuligan
1754 / 1020 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
02.06.2023, 14:30
Цитата Сообщение от Алексей1153 Посмотреть сообщение
вроде нет
Я вообще редко видел в профессиональном коде такие вещи.
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
02.06.2023, 15:17
CoderHuligan, значит, это был не профессиональный код
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,370
02.06.2023, 17:15
Вот так я бы и изобразил, если голова была бы посвежее.
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
int main(void)
{
    int ec = EXIT_FAILURE;
  FILE *f_in = fopen("input.txt", "rt");
    if (f_in != NULL){
         FILE *f_out = fopen("output.txt", "wt");
    if (f_out != NULL){
         size_t n_buffer = 1024; char *buffer = NULL;
             buffer = (char *)malloc(n_buffer);
             if (buffer != NULL)
             {
     while (fgets(buffer, n_buffer, f_in) != NULL)
                 {
        // ...................
                    // Работа
                 }
                 ec = EXIT_SUCCESS;
            free(buffer);
             }   else printf("%s", "heap buffer not created");
             fclose(f_out);
    }   else printf("%s", "output.txt not created");
   fclose(f_in);
    }   else printf("%s", "input.txt not found");
    return ec;
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
02.06.2023, 18:32
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вот так я бы и изобразил, если голова была бы посвежее.
Вот именно на то, чтобы любой ценой избежать подобного ужаса, и направлена львиная доля усилий в области развития методов обработок ошибок и особых ситуаций в языках программирования: исключения, идиомы раннего return, идиомы goto end и т.д...
0
 Аватар для analogov net
2532 / 1130 / 495
Регистрация: 17.11.2018
Сообщений: 2,840
06.06.2023, 00:17
Цитата Сообщение от Ruslan2222 Посмотреть сообщение
Обязательное использование именно динамического массива
Прикрутить к коду проверки и дин. массив - это домашнее задание. А так, например, идея такая( особо не тестил ):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <ctype.h>
 
int main(){
    FILE *fin = fopen( "input.txt", "r" );
    FILE *fout = fopen( "output.txt", "w" );
    char buf[BUFSIZ];
 
    while( fgets( buf, BUFSIZ - 1, fin ) ){
        for( int k = 1; k >= 0; k-- )
            for( char *p = buf; *p && *p != '\n'; p++ )
                if( k ? !isdigit( *p ) : isdigit( *p ) )
                    fputc( *p, fout );
 
        fputc( '\n', fout );
    }
 
    fclose( fin );
    fclose( fout );
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2023, 00:17

Переписать содержимое файла А в файл В, перенося при этом в конец каждой строки все входящие в нее знаки препинания
Дан текстовый файл А. Переписать его содержимое в файл В, перенося при этом в конец каждой строки все входящие в нее знаки препинания. ...

Содержимое текстового файла F перенести в файл G, перенося при этом в конец каждой строки все входящие в нее цифры
Здравствуйте, помогите решить данную задачу. Используя очередь, решить следующую задачу. Содержимое текстового файла F, разделенное на...

Переписать все из файла А в файл В, перенося в конец каждой строки все входящие в нее знаки препинания
Переписать все из файла А в файл В, перенося при этом в конец каждой строки все входящие в нее знаки препинания. С третьей кнопкой явно...

Переписать все цифры каждой строки файла в конец строки
Содержимое текстового файла INPUT.TXT, разделенного на строки, переписать за один проход по файлу в текстовый файл OUTPUT.TXT, перенося при...

Задание со стеками и очередями: Содержимое файла f переписать в файл g, перенося цифры в конец строки
Помогите решить задание: Используя очередь, решить следующую задачу. Содержимое текстового файла f, разделенное на строки, переписать...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru