Giai đoạn tiền xử lý (preprocessing) đọc mã nguồn theo từng dòng và nhận diện các chỉ thị tiền xử lý (preprocessor directive) — những dòng mà sau khi bỏ các khoảng trắng đầu dòng, ký tự đầu tiên là #.
Với một chỉ thị, ngay sau dấu # (có thể có vài khoảng trắng xen giữa # và từ khoá) là một từ khoá gồm các chữ cái liên tiếp (A-Z, a-z, _), ví dụ define, ifdef, ... Từ khoá được xác định là dãy ký tự chữ cái/gạch dưới dài nhất bắt đầu ngay sau # (bỏ qua khoảng trắng đứng giữa).
Cho n dòng mã giả lập, hãy phân loại từng dòng vào đúng một trong 13 nhóm sau:
define, undef, include, ifdef, ifndef, if, elif, else, endif, pragma, error (dòng bắt đầu bằng # và từ khoá trùng khớp chính xác với một trong 11 tên này);unknown: dòng bắt đầu bằng # nhưng từ khoá (nếu trích được) không thuộc 11 tên trên, hoặc không trích được từ khoá nào ngay sau # (ví dụ chỉ có dấu #, hoặc sau # là chữ số);code: dòng không bắt đầu bằng # (sau khi bỏ khoảng trắng đầu dòng).Ví dụ: với dòng # include <a.h> — bỏ khoảng trắng đầu được # include <a.h>, bắt đầu bằng #, từ khoá trích được là include → thuộc nhóm include.
Đếm số dòng thuộc mỗi nhóm trong 13 nhóm trên.
Dòng đầu tiên chứa số nguyên n (0≤n≤1000) — số dòng mã.
n dòng tiếp theo, mỗi dòng là một dòng mã nguồn (có thể chứa khoảng trắng đầu dòng, có thể là dòng rỗng, độ dài mỗi dòng không quá 200 ký tự, không chứa ký tự xuống dòng).
In đúng 13 dòng, theo đúng thứ tự sau, mỗi dòng có dạng <tên nhóm>: <số lượng> (giữa dấu : và số có đúng một khoảng trắng):
define: <sl>
undef: <sl>
include: <sl>
ifdef: <sl>
ifndef: <sl>
if: <sl>
elif: <sl>
else: <sl>
endif: <sl>
pragma: <sl>
error: <sl>
unknown: <sl>
code: <sl>
Ví dụ:
Đầu vào:
0
Đầu ra:
define: 0
undef: 0
include: 0
ifdef: 0
ifndef: 0
if: 0
elif: 0
else: 0
endif: 0
pragma: 0
error: 0
unknown: 0
code: 0
Đầu vào:
5
#define X 5
# include <stdio.h>
int main() {
#ifdef X
return 0;
Đầu ra:
define: 1
undef: 0
include: 1
ifdef: 1
ifndef: 0
if: 0
elif: 0
else: 0
endif: 0
pragma: 0
error: 0
unknown: 0
code: 2
Đang tải editor...