Esto te puede ayudar tengo problemas con el orden pero despues esta todo bien:
//La exprecion a evaluar
string Cadena = this.textBox1.Text;//colocar aqui la expresion a evaluar
//Convertir a un array de "char"
char[] texto;
texto = Cadena.ToCharArray();
string[] datos;
//Contendra los indices donde se encuentran los "("
List
<int> Niveles
= new List
<int>();
for (int i = 0; i < texto.Length; i++)
{
if (texto[i].ToString() == "(")
Niveles.Add(i);
}
//ahora que ya conocemos el total de niveles inicializamos el tamaño de datos[]
datos
= new string[Niveles
.Count + 1];
//comenzamos a llenar los datos pero comenzando desde el menor valor los caracteres que ya recorrimos los llenamos con espacios en blanco
for (int i = datos.Length - 1; i >= 0; i--)
{
datos[i] = "";
bool termino = false;//variable que indica si termino la busqueda de ")"
if (i > 0)
{
for (int j = Niveles[i - 1]; j < texto.Length; j++)
{
if (texto[j] == char.Parse(")"))
{
termino = true;
}
if (texto[j] != char.Parse("(") && texto[j] != char.Parse(")") && texto[j] != char.Parse(" "))
{
datos[i] = datos[i] + texto[j].ToString();
}
texto[j] = char.Parse(" ");
if (termino)
break;
}
}
else
{
for (int j = 0; j < texto.Length; j++)
{
if (texto[j] != char.Parse("(") && texto[j] != char.Parse(")") && texto[j] != char.Parse(" "))
{
datos[i] = datos[i] + texto[j].ToString();
}
}
}
}
foreach (string r in datos)
MessageBox.Show(r);