Básicamente la idea sería ir leyendo el string, e ir sumando los valores de las letras.
Ahora, tenemos el problema en cuanto una letra de valor menor a otra se encuentra a la izquierda de esta.
Lo que podrías hacer es llevar un caracter en el que indiques por qué letra vas (es decir, si la última que leíste es una M, D, C, L, X, V, I). La idea es que no leas una chica antes de una grande.
O puesto que las restas no se hacen con más de una letra, podrías recorrer de izquiera a derecha sumando, y verificando que no haya una dupla de resta.
Por ejemplo:
MXM
1era dupla: MX -> es letra grande-chica -> sumo M -> avanzo 1 lugar
2da dupla XM -> es letra chica-grande -> a la grande le resto la chica -> sumo -> avanzo 2 lugares
Entonces, en MDXLIV, tendríamos
1era -> MD -> mayor-menor -> sumo M al total (1000). Avanzo uno.
2da -> DX -> mayor-menor -> sumo D al total (1500). Avanzo uno.
3era -> XL -> menor-mayor -> L - X = 40, lo sumo al total (1540). Avanzo dos.
4ta -> IV -> menor-mayor -> V - I = 4, lo sumo al total (1544).
Terminó la cadena, total = 1544.
Espero haberme explayado bien. :S