No tengo muy claro qué es lo que quieres hacer, pero respecto a la 2ª cuestión, siempre puedes sustituir el bucle "for" por un bucle "while" cuya condición de salida sea que el índice sea diferente de '\0';
Algo así:
Código C++:
Ver original#include <iostream>
using namespace std;
int main()
{
char operacion[30];
cout<<"Ingresa la frase"<<endl;
cin.getline(operacion,30);
int i=0;
while (operacion[i]!='\0')
{
switch(operacion[i])
{
case 'h':cout<<"Imprime la h"<<endl;
break;
case 'o':cout<<"Imprime la o"<<endl;
break;
case 'l':cout<<"Imprime la l"<<endl;
break;
case 'a':cout<<"Imprime la a"<<endl;
break;
case '+':cout<<"Imprime la +"<<endl;
break;
case '-':cout<<"Imprime la -"<<endl;
break;
case '*':cout<<"Imprime la *"<<endl;
break;
case '/':cout<<"Imprime la /"<<endl;
break;
case '(':cout<<"Imprime la ("<<endl;
break;
case ')':cout<<"Imprime la )"<<endl;
break;
}
i++;
}
cout<<i;
return 0;
}