w3resource

C Programming: Verify that a string contains valid parentheses

C String: Exercise-36 with Solution

From Wikipedia-
A bracket is either of two tall fore- or back-facing punctuation marks commonly used to isolate a segment of text or data from its surroundings. Typically deployed in symmetric pairs, an individual bracket may be identified as a left or right bracket or, alternatively, an opening bracket or closing bracket, respectively, depending on the directionality of the context.

C Programming: Verify that a string contains valid parentheses.

A given string contains the bracket characters '(', ')', '{', '}', '<', ‘>', '[' and ']', Write a C program to check if the string is valid or not. The input string will be valid when open brackets and closed brackets are same type of brackets.

Or

open brackets will be closed in proper order.

Sample Data:

( "<>") -> true
("<>()[]{}") -> true
( "(>") -> false

Sample Solution:

C Code:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// Function to test if the brackets in the string are balanced
bool test(char *s, int len) {
    int ctr = 0, x = 0, y = 0, z = 0;
    char *string2;
    string2 = (char *)malloc(len); // Allocating memory for a temporary stack

    while (*s != 0) {
        // Checking for opening brackets and storing them in the temporary stack
        if (*s == '(') {
            x++;
            string2[++ctr] = 1; // Storing the value 1 for '(' in the stack
        }

        if (*s == '[') {
            y++;
            string2[++ctr] = 2; // Storing the value 2 for '[' in the stack
        }

        if (*s == '{') {
            z++;
            string2[++ctr] = 3; // Storing the value 3 for '{' in the stack
        }

        // Checking for closing brackets and validating them against the stack content
        if (*s == ')') {
            if (string2[ctr] == 1) {
                x--;
                ctr--;
            } else {
                free(string2); // Freeing the memory allocated for the stack
                return false;
            }
        }
        if (*s == ']') {
            if (string2[ctr] == 2) {
                y--;
                ctr--;
            } else {
                free(string2);
                return false;
            }
        }
        if (*s == '}') {
            if (string2[ctr] == 3) {
                z--;
                ctr--;
            } else {
                free(string2);
                return false;
            }
        }
        s++;
    }

    free(string2); // Freeing the memory allocated for the stack

    // Checking if all brackets are balanced
    if (x > 0 || y > 0 || z > 0)
        return false;

    return true;
}

int main() {
    char string1[80];
    int n, i, x;
    printf("Input a string: ");
    scanf("%s", string1);
    n = strlen(string1);
    printf("Check whether brackets in the string are valid or not: %d", test(string1, n));
    return 0;
}

Sample Output:

Input a string: <>()[]{}
Check bracket in the said string is valid or not? 1

Flowchart :

Flowchart: Verify that a string contains valid parentheses

C Programming Code Editor:

Improve this sample solution and post your code through Disqus.

Previous C Exercise: Length of the longest substring in a given string.
Next C Exercise: Multiple two positive numbers represent as string.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.