Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
The_Rock

Сортировка номеров машин с записью в файл

05.03.2012, 11:24. Показов 1461. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание было такое:
Составить программу, определяющую вид регистрационного номера автомобиля.
Номер может быть обычным, специальным и не соответствующим правилам.
Обычный номер начинается двумя или тремя цифрами, после которых следуют три больших латинских буквы.
Например: «367ARZ», «82ZBG».
Специальные номера имеют длину до 9 знаков, номер должен заканчиваться хотя бы одной цифрой, остальные символы - большие латинские буквы.
Например: «MEDIA782», «R2», «MARIKA1».
Создать текстовый файл с номерами различного типа (минимум 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
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
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
char * kontrolli( char * input) {
 
    // eemaldame inputist tühikud
    char f_input[80];
    int j = 0;
    for (int i = 0; i <= strlen(input); i++) {
        if (i == strlen(input)) {
            f_input[j] = '\0';
            break;
        }
        else if (input[i] != ' ' and input[i] != '\t') {
            f_input[j] = input[i];
            j++;
        }
    }
 
    // kontrollime pikkust
    if ( strlen( f_input ) > 9) {
        // liiga pikk
        return "reeglitele mittevastav";
    }
    else {
 
        for (int i = 0; i < strlen( f_input ); i++) {
            if (!isalnum(f_input[i])) {
                // sisaldab lubamatuid tahemarke
                return "reeglitele mittevastav";
            }
        }
    }
 
    // tavaline numbrimark
    int numbreid = 0;
    int tahti = 0;
 
    bool numbrid_otsas = false;
 
    if ( strlen( f_input ) == 6 || strlen( f_input ) == 5) {
        for (int i = 0; i < strlen( f_input ); i++) {
 
            // alguses peavad olema numbrid
            if( !numbrid_otsas && isdigit( f_input[i] ) ) {
                numbreid += 1;
            }
            else {
                numbrid_otsas = true;
            }
 
            // lõpus peab olema 3 tähte
            if (numbrid_otsas) {
                if (isalpha(f_input[i])) {
                    tahti += 1;
                }
            }
        }
    }
 
 
    if (tahti == 3 && (numbreid == 2 or numbreid == 3)) {
        return "tavaline";
    }
    else {
        // kontrollime erinumbreid
        // peab olema üks number
 
        tahti = 0;
        numbreid = 0;
        for (int i = 0; i < strlen( f_input ); i++) {
            if (isdigit(f_input[i])) {
                numbreid += 1;
            }
            else if (isalpha(f_input[i])) {
                tahti += 1;
            }
        }
 
        if (numbreid > 0 and tahti > 0) {
            return "eritellimusel tehtud";
        }
    }
 
 
    return "reeglitele mittevastav";
}
 
int main()
{
    const char * data[] = {
        "367ARZ", "82ZBG", "MEDIA7", "R2", "MARIKA1", "jfkl;", "ABD232", "da234", "32df",
        "jjfksadljfkldsfl", "2232424234", "123456789", ";.,.", "234 adf"};
 
    int total_size, tmp_size;
    total_size = sizeof( data );
    tmp_size = 0;
 
    for (int i = 0; tmp_size < total_size; i++) {
        printf("%20s | %s\n", data[i], kontrolli( (char *) data[i] ));
        tmp_size += sizeof(data[i]);
    }
 
    return 0;
}
Проблема в том, что номера он берёт из массива как видите, и выводит на экран
const char * data[] = {
"367ARZ", "82ZBG", "MEDIA7", "R2", "MARIKA1", "jfkl;", "ABD232", "da234", "32df",
"jjfksadljfkldsfl", "2232424234", "123456789", ";.,.", "234 adf"};
А нужно, чтобы брал из файла, и записывал в другой файл, как в задании. Никак не могу реализовать.
Из файла номера вытаскиваю таким образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main () {
  string line;
  ifstream myfile ("avtonomer.txt");
  if (myfile.is_open())
  {
    while ( myfile.good() )
    {
      getline (myfile,line);
      cout << line << endl;
    }
    myfile.close();
  }
 
  else cout << "Unable to open file";
 
  return 0;
}
Тоже вытаскиваются без ошибок, хорошо.
Как соединить эти два кода вместе и сделать вывод данных в другой файл - ума не приложу. Уже десятки вариантов перепробовал, ничего не работает. В С++ я абсолютный новичек, поэтому не пинайте, если спрашиваю глупый вопрос.

Добавлено через 16 часов 33 минуты
Неужели никто не в курсе как такое решить?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2012, 11:24
Ответы с готовыми решениями:

Матрица с записью в файл С++
Написать программу на С++, работа с матрицей, по этой матрице создать цикл: int mas = { { 0, 1, 0, 0, 0, 0, 0 }, { 1, 0, 1, 0, 0,...

Ошибка с записью в файл
Итак, мне в данной части кода не работает запись, т.е. когда я выбираю запись, то у меня сразу же завершается цикл записи и ничего не...

Проблема с записью в файл
Не умею работать с выводом в файл в С++, как сделать чтобы записывало результат в txt, это кодировка Хаффмана #include &lt;iostream&gt; ...

3
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
05.03.2012, 11:50
Ну вы считали их из массива
C++
1
getline (myfile,line);
и вывели в консоль
C++
1
cout << line << endl;
Используйте вместо cout дескриптор вашего открытого файла -
C++
1
2
ofstream outputfile ("outputfile.txt");
outputfile << outputValue;
Из файла номера вытаскиваю таким образом
Как говориться, как "вытаскиваете", так и "втаскивайте".
Если бы Вы это все сами написали, я сомневаюсь, что сюда бы написали такой банальный вопрос.

Почитайте:
std::ofstream
Вообще полезный ресурс.
0
The_Rock
05.03.2012, 14:43
zulkis спасибо за ответ. Я пошел другим путём, и сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    FILE*sisend;  // File Control Block
    sisend = fopen("avtonomer.txt","rt");  // rt = Read Text
    if(sisend==NULL)
    {
        printf("Faili ei saa avada!\n");
        return 1;
    }
    while( not feof(sisend) )  // not End Of File
    {
        char data[100];
        fgets(data,100,sisend);
        
FILE*valjund = fopen("Tulemused.txt","wt");
        fprintf(valjund, "%20s | %s\n", data, kontrolli( (char *) data ));
    }
    return 0;
}
Из файла данные считываются, в другой записываются, всё ок. Только всё пишется косо, с ошибками. Жирным выделил то, что убрал из начального кода вывода, потому что с ним программа не работает. Или это важная часть кода? Как корректно записать вывод?

int total_size, tmp_size;
total_size = sizeof( data );
tmp_size = 0
;
FILE*valjund = fopen("Tulemused.txt","wt");
for (int i = 0; tmp_size < total_size; i++) {
fprintf(valjund, "%20s | %s\n", data[i], kontrolli( (char *) data[i] ));
tmp_size += sizeof(data[i]);
}
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
05.03.2012, 15:11
А вы попробуйте обратно добавить и посмотреть что изменится, и вообще - по шагам, по шагам, в дебагере. Каждую функцию в гугл, смотрите описание, что делает, для чего конкретно нужна. Глядишь и понимание придет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2012, 15:11
Помогаю со студенческими работами здесь

Сортировка с записью в файл
Помогите решить задачку. Дан одномерный массив A. Необходимо: -все отрицательные элементы поместить в начало массива; -остальные...

Сортировка имен с записью в файл
надо записать имена(Алина,Игорь, Василий,Елена,Борис) в файл , затем отсортировать их в алфавитном порядке и вывести результат в другой файл

Сортировка элементов файла с записью в другой файл.
Есть файл с целыми числами. Нужно отсортировать значения (не используя массив) в порядке убывания и записать значения в текстовый файл. ...

Подсчитать количество номеров машин
Подсчитать количество номеров машин, содержащих три одинаковые цифры. (Номер машины четырехзначный). Помогите ,гении, решить)

Определение количества номеров машин
Напишите программу, которая определяет количество номеров машин, содержащих две и только две одинаковые цифры (номер машины четырехзначный...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru