Pues el manejo de arreglos y el manejo de string no es igual.
Un arreglo puede ser una cadena de caracteres por ejemplo:
char cadena[50]; //seria una cadena de longitud máxima 50
//Para asignar un valor a esta cadena usamos la funcion strcpy:
Strcpy(cadena,"esto es una cadena");
mientras que un dato tipo string no se define con una longitud máxima sino:
string cadena;
//para asignar un valor a una cadena tipo string:
cadena="esto es una cadena tipo string";
//Si quisieramos obtener el equivalente de string en cadena del tipo char[] podriamos
//usar la funcion c_str(); que quedaria así:
Cadena. C_str(); //así podriamos manejarla como una cadena normal (como un arreglo) pero solo
//para lectura puesto que el valor que devuelve c_str() no se puede modificar.
aquí te dejo un poco de referencia: http://www.cplusplus.com/reference/string/string/
Y tu otra duda:
Getchar() es una función que espera a que se pulse una tecla y una vez pulsada, se muestra dicho carácter en la pantalla y a su vez el carácter pulsado es devuelto por la función; es decir: si yo quiero mostrar un menú y posteriormente esperar a que se pulse una tecla (que sera una de las opciones del menú) la función getchar() nos viene perfecta:
//... codigo para mostrar menu...
int opcion=getchar();
if(opcion=='a'){
//Codigo para hacer las cosas que indique la opcion a).
}
else if(opcion=='b'){
//.....
}
//.....
Y esto es todo, si sigues con dudas comunícamelo.