Abdulg

Find deepest nested paranthesis

Jul 20th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.19 KB | None | 0 0
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<string.h>
  4.  
  5. char* findInnermost(char* stream);
  6.  
  7. int main()
  8. {
  9.     char* test = "hopefully (the thing returned (should (be (this))))(and not this)";
  10.     char* result = findInnermost(test);
  11.     printf("%s\n", result);
  12.     free(result);
  13.     return 0;
  14. }
  15.  
  16. char* findInnermost(char* stream)
  17. {
  18.     int depth = 0, maxDepth = 0;
  19.     char *leftptr = stream, *rightptr = stream + strlen(stream), *currentptr;
  20.    
  21.     for (currentptr = leftptr; *currentptr != '\0'; currentptr++)
  22.     {
  23.         switch (*currentptr)
  24.         {
  25.             case '(':
  26.                 depth++;
  27.                
  28.                 if (depth >= maxDepth)
  29.                 {
  30.                     maxDepth = depth;
  31.                     leftptr = currentptr;
  32.                 }
  33.                 break;
  34.                
  35.             case ')':
  36.                 if (depth == maxDepth) rightptr = currentptr;
  37.                 depth--;
  38.                 break;
  39.         }
  40.     }
  41.    
  42.     char* innermost = malloc(sizeof(char) * ((rightptr - leftptr) - 1));
  43.     strncpy(innermost, leftptr + 1, rightptr - leftptr - 1);
  44.     innermost[rightptr - leftptr] = '\0';
  45.     return innermost;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment