【問題描述】
編寫一程式檢查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...