null
null

Reputation: 49

Check if input string is parenthesis completed

I'm trying to write a function, that would check for a matching parentheses. For example, if the given string is "(1+1))" it would print false otherwise it's true. However, in my code it's printing false no matter what the case is.


bool isMatched(char pran[]) {
    bool completetd = true;
    int count = 0;

    for (int i = 0; pran[i] != '\0'; i++) {

        if (pran[i] == '('){
            count++;
        }
        else {
            // It is a closing parenthesis 
            count--;
        }
        if (count < 0) {
            // there are more Closing parenthesis  
            completetd = false;
            break;
        }
    
    // If count is not zero, there are more opening parenthesis 
    if (count != 0) {
        completetd = false;
    }
    }
    return completetd;
}


int main() {

    char arr[] = "((1+a))";

    if (isMatched(arr)) {
        printf("TRUE \n");
    }
    else {
        printf("FALSE \n");
    }


    return 0;
}

I would appreciate any help.

Upvotes: 0

Views: 158

Answers (2)

DevBot246
DevBot246

Reputation: 79

You can try this not sure if this is what you are looking for.

bool isMatched(char pran[]) {
    int open = 0;
    int close = 0;

    for (int i = 0; pran[i] != '\0'; i++) {

        if (pran[i] == '('){
            open++;
        }
        
        if (pran[i] == ')'){
            close++;
        }
    }
    // Check if both match
    if(open == close){
        return true;
    }

    return false;
}


int main() {

    char arr[] = "((1+a))";

    if (isMatched(arr)) {
        printf("TRUE \n");
    }
    else {
        printf("FALSE \n");
    }


    return 0;
}

Upvotes: 2

Jean-Benoit Harvey
Jean-Benoit Harvey

Reputation: 404

By adding a
printf("got 1 (!\n"); next to count++;
and a
printf("got 1 )!\n"); next to count--;, you get:

Got 1 (!
Got 1 (!
Got 1 )!
Got 1 )!
Got 1 )!
FALSE 

This shows that you have a validation problem with your checking logic

As pointed-out in the comments, replace your else with else if (pran[i] == ')') { will fix that part for you.
But the real problem lies with your last validation.
Take it out of the for loop. It sets the value to false as soon as you detect a parenthesis.

Thus, take this:

    // If count is not zero, there are more opening parenthesis 
    if (count != 0) {
        printf("Count: %d\n",count);
        completetd = false;
    }
    }

and make it this:

    }
    // If count is not zero, there are more opening parenthesis 
    if (count != 0) {
        printf("Count: %d\n",count);
        completetd = false;
    }

Upvotes: 1

Related Questions