编程题#4:扩号匹配问题

描述

在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.

 

输入

输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100

注意:cin.getline(str,100)最多只能输入99个字符!

 

输出

对每组输出数据,!!!输出两行,第一行包含原始输入字符!!!,第二行由"$","?"和空格组成,"$"和"?"表示与之对应的左括号和右括号不能匹配。

#include <iostream>
using namespace std;
void f(char s[],int);

int main() {
    char s[101];
    while(cin.getline(s,101)) {
        for (int i = 0;s[i] != '\0'; i++)
            cout << s[i];
        cout << endl;
        for (int i = 0; s[i] != '\0'; i++) {
            if (s[i] != ')' && s[i] != '(')
                s[i] = ' ';
        }
        f(s,0);
        for (int i = 0;s[i] != '\0'; i++) 
            if (s[i] == '(')
                s[i] = '$';
        for (int i = 0;s[i] != '\0'; i++)
            cout << s[i];
        cout << endl;
    }
    
    return 0;
} 
void f(char s[],int i) {
    if (s[i] == '\0')
        return;
    else 
        if (s[i] == ')') {
            for (int j = 0; i-j >= 0; j++) {
                if (s[i-j] == '(') {
                    s[i] = ' ';
                    s[i-j] = ' ';
                    break;
                }
                else
                    s[i] = '?';
            }
            
        }
    i++;
    f(s,i);
        
}

 

posted on 2017-10-26 13:50  平行线不会相交  阅读(593)  评论(0)    收藏  举报

导航