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

Проверить правильность расстановки символов “/*” и “*/” для комментариев - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ После каждого слова текста, заканчивающегося заданной подстрокой, вставить указанный символ http://www.cyberforum.ru/cpp-beginners/thread368783.html
После каждого слова текста, заканчивающегося заданной подстрокой, вставить указанный символ. помогите! :)
C++ Рассортировать числа по частоте встречаемости, используя алгоритм обмена Известно, что в массиве размерности N могут быть только целые числа из диапазона 1..31. Рассортировать эти числа по частоте встречаемости, используя алгоритм обмена. http://www.cyberforum.ru/cpp-beginners/thread368781.html
Найти количество строк в максимальном множестве попарно непохожих строк заданной матрицы. C++
Две строки целочисленной матрицы назовём похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк в максимальном множестве попарно непохожих строк заданной матрицы, расположенных подряд. на с++ найти не смог. а с pascal перевести не могу, потому, что не знаю абсолютно с++! Помогите! :)
Открытие txt файла для просмотра C++
#include <stdio.h> int main() { FILE * fi; fi = fopen("test.txt","rt"); int n; while( !feof(fi) ) { fscanf( fi, "%d\n", &n ); printf("%d\n",n );
C++ Подскажите где скачать с++ http://www.cyberforum.ru/cpp-beginners/thread368740.html
Здравствуйте. Подскажите где скачать с++(не визуал и не билдер, для вин32)
C++ написать програму void(char source[] ,char dest[]) которая скопирует все символы из source[] ,которые не принадлежат алфавиту , в dest[]. написать програму void(char source ,char dest) которая скопирует все символы из source ,которые не принадлежат алфавиту , в dest.выводить только символы из dest подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
22.10.2011, 11:00     Проверить правильность расстановки символов “/*” и “*/” для комментариев
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
/////////////////////////////////////////////////////////////////////////////////////////
//Проверить правильность расстановки символов “/*” и “*/” для комментариев 
//во фрагменте программы на языке С++. 
/////////////////////////////////////////////////////////////////////////////////////////
#include <cctype>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef T_str::size_type    T_pos;
/////////////////////////////////////////////////////////////////////////////////////////
const char  SLASH           = '/';
const char  ASTERISK        = '*';
const char  BACKSLASH       = '\\';
const char  SINGLE_QUOTE    = '\'';
const char  DOUBLE_QUOTE    = '"';
/////////////////////////////////////////////////////////////////////////////////////////
enum  T_state
{
    TEXT_STATE,
    C_COMMENT_STATE,
    CPP_COMMENT_STATE,
    SYMB_LITERAL_STATE,
    STR_LITERAL_STATE,
    ERROR_STATE
};
/////////////////////////////////////////////////////////////////////////////////////////
void  TEXT_STATE_parse
    (
        const T_str&    s,
        int             symb_ind,
        int             str_ind,                        
        int&            C_comment_begin_symb_ind,                      
        int&            C_comment_begin_str_ind,                        
        T_state&        cur_state
    )
{
    switch( s[symb_ind] )
    {
    //Начало C-комментария.
    case ASTERISK:
        if(
                symb_ind            !=  0            
            &&  s[symb_ind - 1]     ==  SLASH 
          )
        {
            cur_state               = C_COMMENT_STATE;
            C_comment_begin_symb_ind  = symb_ind - 1;
            C_comment_begin_str_ind   = str_ind;            
        }
        break;
 
    //Конец C-комментария или начало C++-комментария.
    case SLASH:
        if(symb_ind != 0)
        {
            switch( s[symb_ind - 1] )
            {
            case  ASTERISK:
                cur_state = ERROR_STATE;
                break;
 
            case  SLASH:
                if( symb_ind != s.size() - 1 )
                {
                    cur_state = CPP_COMMENT_STATE;
                }
                break;
            }
        }
        break;
 
    case SINGLE_QUOTE:
        if( symb_ind == s.size() - 1 )
        {
            cur_state = ERROR_STATE;
        }
        else
        {
            cur_state = SYMB_LITERAL_STATE;
        }        
        break;
 
    case DOUBLE_QUOTE:
        if( symb_ind == s.size() - 1 )
        {
            cur_state = ERROR_STATE;
        }
        else
        {
            cur_state = STR_LITERAL_STATE;
        }              
        break;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  C_COMMENT_STATE_parse
    (
        const T_str&    s,
        int             symb_ind,
        int             str_ind,                        
        int&            C_comment_begin_symb_ind,                      
        int&            C_comment_begin_str_ind,                        
        T_state&        cur_state
    )
{
    switch( s[symb_ind] )
    {
    case  SLASH:
        if(
                symb_ind            !=  0
            &&  s[symb_ind - 1]     ==  ASTERISK
            &&  (       
                        str_ind    !=   C_comment_begin_str_ind
                    ||  symb_ind - 1 - C_comment_begin_symb_ind > 1
                )
          )
        {
            cur_state = TEXT_STATE;
        }
        break;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  CPP_COMMENT_STATE_parse
    (
        const T_str&    s,
        int             symb_ind,
        T_state&        cur_state
    )
{
    //Если это последний непробельный символ в строке, то.
    if( symb_ind == s.size() - 1 )
    {
        cur_state = TEXT_STATE;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  SYMB_LITERAL_STATE_parse
    (
        const T_str&    s,
        int             symb_ind,
        T_state&        cur_state
    )
{
    switch( s[symb_ind] )
    {
    case  SINGLE_QUOTE:
        if( s[symb_ind - 1] != BACKSLASH )
        {
            cur_state = TEXT_STATE;
        }
        break;
 
    default:
        //Если это последний непробельный символ в строке, то.
        if( symb_ind == s.size() - 1 )
        {
            cur_state = ERROR_STATE;
        }
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  STR_LITERAL_STATE_parse
    (
        const T_str&    s,
        int             symb_ind,
        T_state&        cur_state
    )
{
    switch( s[symb_ind] )
    {
    case  DOUBLE_QUOTE:
        if( 
                symb_ind            == 0
            ||  s[symb_ind - 1]     != BACKSLASH 
          )
        {
            cur_state = TEXT_STATE;
        }
        break;
 
    default:
        //Если это последний непробельный символ в строке и это не обратный слэш, то.
        if(
                symb_ind        ==  s.size() - 1               
            &&  s[symb_ind]     !=  BACKSLASH
          )
        {
            cur_state = ERROR_STATE;
        }
        break;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  C_comments_in_CPP_text_are_correct
    (
        const T_str&    ifilename,
        bool&           file_is_open
    )
{
    std::ifstream   ifile( ifilename.c_str() );
    file_is_open = ifile != 0;
    if( !file_is_open )
    {
        return  false;
    }
 
    T_str       s;             
    
    T_state     cur_state                   = TEXT_STATE;
    int         str_ind                     = 0; 
 
    int         C_comment_begin_symb_ind    = 0;
    int         C_comment_begin_str_ind     = 0;   
 
    //Обрабатываем строки файла.
    while( getline(ifile, s) )
    {  
        ++str_ind;
 
        while( 
                    !s.empty()
                &&  isspace( *s.rbegin() ) 
             )
        {
            s.erase( s.size() - 1 );
        }        
        
        for(size_t  symb_ind = 0; symb_ind < s.size(); ++symb_ind)
        {               
            switch(cur_state)
            {
            case  TEXT_STATE:
                TEXT_STATE_parse
                    (
                        s,
                        symb_ind,
                        str_ind,                        
                        C_comment_begin_symb_ind,                      
                        C_comment_begin_str_ind,                        
                        cur_state
                    );
                break;
 
            case  C_COMMENT_STATE:
                C_COMMENT_STATE_parse
                    (
                        s,
                        symb_ind,
                        str_ind,
                        C_comment_begin_symb_ind,                      
                        C_comment_begin_str_ind,                        
                        cur_state
                    );
                break;
 
            case  CPP_COMMENT_STATE:
                CPP_COMMENT_STATE_parse
                    (
                        s,
                        symb_ind,
                        cur_state
                    );
                break;
 
            case  SYMB_LITERAL_STATE:
                SYMB_LITERAL_STATE_parse
                    (
                        s,                        
                        symb_ind,
                        cur_state
                    );
                break;
 
            case  STR_LITERAL_STATE:
                STR_LITERAL_STATE_parse
                    (
                        s,
                        symb_ind,
                        cur_state
                    );
                break;
 
            case  ERROR_STATE:
                return  false;
            }//switch            
        }//for
    }//while
    return  cur_state == TEXT_STATE;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{    
    std::locale::global(std::locale(""));
    T_str   ifilename       =   "f.txt";
    bool    file_is_open    =   false; 
    bool    bool_res        =   C_comments_in_CPP_text_are_correct
                                    (
                                        ifilename,
                                        file_is_open
                                    );
 
    if( !file_is_open )
    {
        std::cout << "Невозможно открыть файл \""
                  << ifilename
                  << "\"."
                  << std::endl;    
    }
    else
    {
        std::cout << "В файле "
                  << ifilename
                  << " C-комментарии во фрагменте программы на C++"
                  << (bool_res ? "" : " НЕ")
                  << " корректны."
                  << std::endl;
    }    
}
 
Текущее время: 01:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru