Pues mira, como yo lo haria de dos opciones:
una es poniendole un indicador a cada palabra...como es esto, bueno, mira si en tu archivo escribes asi:
pedro*juan*gera
Entonces puedes utilizar esta sentencia
Archivo.getline(palabra,128,'*');
cuales los parametros son
palabra: es el puntero a una cadena de tipo char
128: es el numero de bytes que quieres leer incluyendo caracter nullo (\0)
'*': es el delimitador de lectura, asea que va a leer hasta que encuentre este caracter
asi si kieres el segundo nombre pues pones solo pones un while hasta que lea esa palabra:
Código C++:
Ver originalcout<<"Dame la posicion: ";
cin>>ipos;
while(ipos)
{
fe.getline(cadena, 128,'*');
ipos--;
}
Con esto solo debes resolver el problema de la longitud de cadenas, ejemplo si lees la cadena "juan" y la modificas por la de enrique
entonces tu archivo va a sermodificado de esta manera
pedro*enriquera
borrando parte de la tercer cadena, yo lo arreglaria poniendo una longitud predeterminada a las cadenas, por ejemplo que sean de 10, entonces tu archivo queda asi
pedro *juan *gera *
rellenando la longitud restante con espacios, ya solo al leer borras esos espacios y listo...
y la segunda es: Ya sabiendo esto de las cadenas con misma longitud, pues ya sabes sus posiciones de cada palabra, ejemplo:
la primer palabra esta desde la posicion 0 hasta la 10, la segunda desde la 11 a la 20 y la tercera desde la 21 hasta la 30, debes tener en cuenta el asterisco tambien, asi que por eso se ve disparejo, pero te lo explico mas sencillo
si quieres la primer palabra tienes que empezar de cero, para la segunda desde 11, para la tercera 21 y aki ya aumenta de diez en diez
asi si te pide cualquier posicion lo puedes hacer asi:
Código C++:
Ver originalif(iPosDada==1)
iPosPalabra=0;
else
iPosPalabra= (--iPosDada*10)+1;
Archivo.seekg(ipos,ios::beg);
Archivo.getline(cadena, 11,'*');
Espero te sirva
Saludos
P.D. Esto es como yo lo haria, si hay otra idea mas eficiente, estaria encantado de probarla, pues asi es como se aprende.