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

ИНИ-файл. Обработка файла. Строки. (Только для умелых) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как можно считать из файла большой текст? http://www.cyberforum.ru/cpp-beginners/thread732532.html
Как можно считать из файла большой текст? Просто если я использую обычный массив a, то программа зависает.
C++ Матрица (максимальный и минимальный элемент) #include<iostream.h> #include<conio.h> #include<math.h> int main() { int x={1,2,3,4,-1,-9,2,-1,6,-11},i,j; for(i=0;i<4;i++) for(j=0;j<3;j++) printf("\n x",i,j); http://www.cyberforum.ru/cpp-beginners/thread732525.html
Дан одномерный массив из 10 чисел определить номер 1 из встретившихся элементов, значение которого равно 0 C++
11. Дан одномерный массив из 10 чисел определить номер 1 из встретившихся элементов, значение которого равно 0. Помогите составить блок схему, пожалуйста.
Структуры(совсем немного переделать) C++
#include <iostream.h> #include <stdio.h> #include <conio.h> struct TStudent{ char Name; int Balls; }; int main()
C++ Получить матрицу, элемент которой равен суме элементов матрицы http://www.cyberforum.ru/cpp-beginners/thread732469.html
Дано действительную матрицу А порядка N. Получить действительную матрицу B, элемент которой {b}_{ij} равно суме элементов данной матрицы, которые не находятся в i-том ряде и j-том столбце. ввод размера матрицы и заполнение матрицы А с клавиатуры.
C++ Алгоритм Флойда. Восстановить пути У меня есть рабочий алгоритм Флойда, он выводит все пути и максимальный путь, необходимо восстановить этот максимальный путь. Т.е. вывести все вершины, которые входят в данный путь. Я знаю, что для этого нужно завести массив, но вот как его заполнять и выводить не могу сообразить.Я созад массив p, подскажите, как заполнить его. //флойд #include <fstream> #include <algorithm> #include <vector>... подробнее

Показать сообщение отдельно
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
15.12.2012, 16:09     ИНИ-файл. Обработка файла. Строки. (Только для умелых)
С помощью ini-файлов в Windows записываются настройки приложений. Каждая строка ini-файла либо определяет некоторое значение, либо начинает секцию.

Строка, определяющая значение, имеет вид "key=value", где key — это название некоторого свойства, а value — его значение. По обе стороны key и value могут быть пробелы, которые стоит игнорировать.

Строка, начинающая секцию, имеет вид "[section]". Эта строка обозначает, что все последующие строки вида "key=value" определяют свойства для секции section. Разумеется, следующая строка начала секции меняет текущую секцию. В строках этого вида тоже могут встречаться незначащие пробелы (до и после любой квадратной скобки).

Cтроки, у которых первый непробел является символом ";", следует игнорировать.

Ваша задача, написать программу, которая обработает заданный корректный ini-файл и выведет его в специальном виде:
сначала следует разместить строки вида "key=value", для которых секция не определена;
затем следует разместить все секции в лексикографическом (алфавитном) порядке их названий;
внутри каждого блока, описанного в двух предыдущих пуктах, строки вида "key=value" следует упорядочить лексикографически по "key";
если существует более одной пары "key=value" с одинаковым "key" для одной секции (или с неопределенной секцией), то следует выводить только последнее вхождение (для порядка определенного входными данными);
все незначащие пробелы и переводы строк следует удалить.



Входные данные
Первая строка содержит одно целое число n (1 ≤ n ≤ 510) — количество строк в данном ini-файле.

Далее в n строках описан корректный ini-файл. Значения section, key и value состоят только из латинских букв, цифр и символов "." и "-".

Длины всех строк не превышают 255 символов и не меньше 1 символа, суммарная длина всех строк не превосходит 10000.


Выходные данные
Выведите заданный ini-файл в требуемом виде.
input.txt
11
a= 1
b=a
a = 2
; comment
[z]
1=2
[y]
2=3
[z]
2=1
[w]
output.txt
a=2
b=a
[w]
[y]
2=3
[z]
1=2
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
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
 
using namespace std;
 
int main(){
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    map <pair <string, string>, string> inifile;
    int n;
    scanf("%d\n", &n);
    string str, key, value, section = "";
    for(int i = 0; i < n; i++){
        getline(cin, str);
        string temp = "";
        for (int j = 0; j < str.length(); j++){
            if (str[j] != ' ' && str[j] != '\t' && str[j] != '\n'){
                temp += str[j];
            }
        }
        if (temp[0] == ';' || temp == ""){
            continue;
        }
        if (temp[0] == '['){
            section = temp;
            inifile[make_pair(section, "")] = "";
            continue;
        }
        bool flag = 0;
        key = value = "";
        for (int j = 0; j < temp.length(); j++){
            if (flag){
                value += temp[j];
            }else{
                if (temp[j] != '='){
                    key += temp[j];
                }else{
                    flag = 1;
                }
            }
        }
        inifile[make_pair(section, key)] = value;
    }
    section = "";
    for (map <pair <string, string>, string>::iterator it = inifile.begin(); it != inifile.end(); ++it){
        if ((*it).first.first != section){
            cout << (*it).first.first << endl;
            section = (*it).first.first;
            continue;
        }
        cout << (*it).first.second << "=" << (*it).second << endl;
    }
    return 0;
}
Test.1: OK with Time 0 ms
Test.2: OK with Time 0 ms
Test.3: OK with Time 15 ms
Test.4: OK with Time 0 ms
Test.5: OK with Time 0 ms
Test.6: OK with Time 0 ms
Test.7: OK with Time 0 ms
Test.8: OK with Time 0 ms
Test.9: OK with Time 0 ms
Test.10: OK with Time 0 ms
Test.11: OK with Time 0 ms
Test.12: OK with Time 0 ms
Test.13: OK with Time 15 ms
Test.14: OK with Time 31 ms
Test.15: OK with Time 15 ms
Test.16: OK with Time 0 ms
Test.17: OK with Time 0 ms
Test.18: OK with Time 15 ms
Test.19: OK with Time 0 ms
Test.20: OK with Time 0 ms
Test.21: OK with Time 0 ms
Test.22: WA with Time 0 ms
Test.23: WA with Time 0 ms
Test.24: WA with Time 0 ms
Test.25: OK with Time 0 ms
Result - 22/25
Написал решение уже на 3 языках, но всёравно 3 теста wa. Наверное, я что то не понял. Прошу о помощи, т.к. я уже не первый раз эту задачу пытаюсь сдать, но тщетно.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru