C程式括號匹配檢查

2021-07-22 21:49:39 字數 1500 閱讀 2080

【問題描述】

編寫一程式檢查c源程式檔案中{}、()等括號是否匹配,並輸出第乙個檢測到的不匹配的括號及所對應括號所在的行號(程式中只有乙個括號不匹配)。

注意:1.     除了括號可能不匹配外,輸入的c源程式無其它語法錯誤;

2.     字元常量、字串常量及注釋中括號不應被處理,注釋包括單行注釋//和多行/* */注釋

3. 字元和字串常量中不包含特殊的轉義字元(\',\")

5. 程式中出現有意義括號的個數不超過200個

不匹配判斷規則:

1. 當遇到乙個不匹配的右括號(')'或'}')時,輸出該右括號及所在行號;

2. 當程式處理完畢時,還存在不匹配的左括號時,輸出該左括號及所在行號。

【輸入形式】

開啟當前目錄下檔案example.c,查體其括號是否匹配。

【輸出形式】

without maching at line

其中為『』, 『(』, 『)』等符號,為該符號所在的行號。

若整個程式括號匹配,則按下面所示順序輸出括號匹配情況,中間沒有空格。

()}【樣例輸入1】

若當前目錄下輸入檔案example.c中內容如下:

#include

int main()\n"); // }

)【樣例輸出1】

without maching ')' at line 4

【樣例輸入2】

若當前目錄下輸入檔案example.c中內容如下:

#include

int main()d\n"); /* }*/

【樣例輸出2】

without maching 'd\n"); /* }*/

}【樣例輸出3】

()【樣例說明】

樣例1:在注釋部分和字串中的括號不考慮,在將程式處理之後得到的括號序列是()

int main()

} else if (tmp == '\'')

}else if (tmp == '/')

else if (tmp == '*')

tmp = fgetc(fin);

if (tmp == '\n') line++;

if (tmp == '/') flag = 1;}}

else if (tmp == '(')

}else if (tmp == '(' || tmp == '

else if (tmp == ')')

iter_bstack--;

}} else if (tmp == '}')

iter_bstack--;

}} else continue;

} bracket_w_stack[++iter_w_bstack] = '\0';

while (!error && iter_bstack >= 0)

if(!error) printf("%s", bracket_w_stack);

fclose(fin);

return 0;

}

C語言 檢查括號是否匹配

括號不匹配情型 實現 main函式 執行截圖 我們有這樣一組括號序列 根據下面的序號我們可以知道第乙個括號與最後乙個括號進行匹配,第二個與倒數第二個進行匹配其他的以此類推,我們發現括號匹配具有先進後匹配的特性,這一特性剛好和棧的特性相匹配 先進後出 我們利用棧的原理進行儲存 當我們遇到 這一類括號使...

字串括號匹配檢查

include stdafx.h struct charstack char c struct node pnext struct node ptop charstack void push char c else char pop bool ismatch char str break case ...

HRBUST 語法檢查 括號匹配 棧

time limit 1000 ms memory limit 65536 k 有多組測試資料,每組測試資料有一段 該段 可能在有多行。每段 以ctrl z結束。處理到檔案結束。每組測試資料輸出一行。如果這段 括號匹配了,輸出 right 否則輸出 wrong。include right wrong...