С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Создание сложной структуры или класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Распределение работы между несколькими работниками http://www.cyberforum.ru/cpp-beginners/thread321872.html
Задали по курсачу прогу на тему: "Распределение работы между несколькими работниками" И препод необъяснил даже что ему надо:) Вообще непонимаю с чего начинать, буду благодарен любым советам
C++ Перекрестные ссылки Задание: Составить программу, формирующую "перекрестные списки" т. е. печатающую список слов, которые встречаются в анализируемом файле, а для каждого слова - список номеров строк, в которых это... http://www.cyberforum.ru/cpp-beginners/thread321858.html
массив одномерный C++
поменять на противоположные знаки тех эл-в массива,которые встречаются ровно 1раз. утром сдавать.напишите полномтью программу.пожалуйста.на языке Си.
C++ одномерный и двумерный массивы, строки
3. Строки Дана строка из символов латинского алфавита. Замените все вхождения строки "two" на символ '2 4. Одномерный массив Преобразование массива Дан массив ,состоящий из n элементов....
C++ Классы, Длинная арифметика, LongLong http://www.cyberforum.ru/cpp-beginners/thread321835.html
Добрый день, Задание изначально было такое: Реализовать класс Money , используя для представления рублей класс LongLong. Класс Money - представлен двумя полями LongLong для рублей и unsigned...
C++ Поменять знаки тех элементов массива, которые встречаются в нем один раз поменять на противоположные знаки тех элементов массива,которые встречаются в массиве ровно 1 раз подробнее

Показать сообщение отдельно
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
19.06.2011, 03:14
Я таки не понял твои стрктуры то нет того параметра который есть в файле, вот тебе примеры парсинга для размышления начиркал перед сном.
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
114
115
116
117
118
119
  struct  LineDB {
             int Serial [1];                         // = ( 73 )
             int LineNodes [1];                      // = (  31      количество записей  TrackNode
             int LineNode[1];
             int LnEndNode[1];
             float  UiD[12];
  };
 
  // только числа целые и не целые
  bool  _digit(const char* _s) {
      int c = 0, t = strlen(_s);
      while( *_s ) {
        if(isdigit( *_s ) || *_s == ',' || *_s == '-' )
               ++c;
                *_s++;
      }
      return (c == t) ? true : false;
  }
 
 
  // подсчёт указанных скобок
 int  _pos(const char* str, int  cnt) { 
     int ch = 0, pt = 0;
     for( ; *str != '\0'; *str++, ++ch) {
         if( *str == ')' ) {
            pt++;
            if(pt  >= cnt)
                  return ch + 1;
         }
     }
     return  0;
 }
 
 // парсер параметров  в скобках без вложений
 void   parse(std::string  val, const char* param, char*  sget, bool _space = true) {
    int pos = val.find(param, 0);
    std::string::iterator iter = val.begin() + pos + strlen(param);
    while( iter != val.end() ) {
        if( isspace( *iter) && _space || *iter == '(') {
            *iter++;
             continue;
        } 
        if( *iter == ')' )
            break;
        if(_space)
                  *sget++ = *iter;
        else {
                  if( *iter == '.' )
                 *sget++ = ',';
                  else
                 *sget++ = *iter;
        }
        *iter++;
    }
 }
 
 
// постройка структуры из  текста
bool  line_db(std::string  str, LineDB&  line) {
 
    int  first = str.find( "LineDB", 0);
    if(first == std::string::npos)
                 return false;
    int last = _pos(str.c_str() + first, 8);
    if(! last)
           return false;
 
    std::string tmp = str.substr(first, last - first);
 
    char  var[255];
    parse(tmp.c_str(), "Serial", var);
    line.Serial[0]         = atoi(var);
 
           parse(tmp.c_str(), "LineNodes", var);
    line.LineNodes[0] = atoi(var);
 
    parse(tmp.c_str(), "LineNode", var);
           line.LineNode[0] = atoi(var);
 
    parse(tmp.c_str(), "LnEndNode", var);
    line.LnEndNode[0] = atoi(var);
 
    parse(tmp.c_str(), "UiD", var, false);
    int  ic = 0;
    char* tok;
    for(tok = strtok(var, " "); tok; tok = strtok(NULL, " "), ic++) {
           if(_digit(tok)) 
        line.UiD[ic] = atof(tok);
    }
 
    return true;
}
 
 
 
 // тестим
 void  main(void){
 
    FILE*  fp = fopen("X:\\test.txt", "r" );
    std::string  str  = "";
 
    char buff[512];
    while(! feof(fp) ) {
        fgets(buff, sizeof(buff), fp);
        str.append(buff);
    }
    fclose(fp);
 
    LineDB  line;
    if(line_db(str, line))
           puts("\tYES PARSE - LineDB");
 
    printf("Serail = %d\nNodes = %d\nNode = %d\nEndNode = %d\n\nUiD: ", line.Serial[0], 
             line.LineNodes[0], line.LineNode[0], line.LnEndNode[0]);
 
    for(int i = 0; i < sizeof(line.UiD) / sizeof(float); i++)
            printf("%f, ", line.UiD[i] );
 
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.