Why is this c++ code producing weird characters?

  algebra, c++, character

I wanted to simplify algebraic expressions in c++. I started with something simple: removing brackets from a algebraic expression containing + and - operators. For example, a-(b-c) should be simplified to a-b+c. This link gives the answer to this question. Here is the source code:

#include <iostream>
#include <string.h>
#include <stack>

using namespace std; 
  
// Function to simplify the string 
char* simplify(string str) 
{ 
    int len = str.length(); 
  
    // resultant string of max length equal 
    // to length of input string 
    char* res = new char(len); 
    int index = 0, i = 0; 
  
    // create empty stack 
    stack<int> s; 
    s.push(0); 
  
    while (i < len) { 
        if (str[i] == '+') { 
  
            // If top is 1, flip the operator 
            if (s.top() == 1) 
                res[index++] = '-'; 
  
            // If top is 0, append the same operator 
            if (s.top() == 0) 
                res[index++] = '+'; 
  
        } else if (str[i] == '-') { 
            if (s.top() == 1) 
                res[index++] = '+'; 
            else if (s.top() == 0) 
                res[index++] = '-'; 
        } else if (str[i] == '(' && i > 0) { 
            if (str[i - 1] == '-') { 
  
                // x is opposite to the top of stack 
                int x = (s.top() == 1) ? 0 : 1; 
                s.push(x); 
            } 
  
            // push value equal to top of the stack 
            else if (str[i - 1] == '+') 
                s.push(s.top()); 
        } 
  
        // If closing parentheses pop the stack once 
        else if (str[i] == ')') 
            s.pop(); 
  
        // copy the character to the result 
        else
            res[index++] = str[i]; 
        i++; 
    } 
    return res; 
} 

I tested the function on a-(b-c-(d+e))-f and it gave the result a-b+c+d+e-fÿï┌. Why is it producing weird characters?

Source: Windows Questions C++

LEAVE A COMMENT