Aquí corregí el código:
Puse un par de couts explicando lo que pid een cada caso. Ahora te explico:
Tenías un "while(cin << c)". Eso hacía que no saliera del ciclo, y continuaba pidiendo caracteres.
Te convertí 'c' e un string, y lo cambié un poco.
Tenías 1 fallo, que erradicaba en un uso obligado de otro:
Tenías: "for(int i=1;i<MAX;i++) ..."
Por ese motivo, tenias que poner "while(cin >> c[0])" Ese '0' se evita ponerlo, si le I del for la inicializas en 0. Ademásde cambiar eso, podrías quitar el while, o dejarlo como lo puse yo, para que pida infinitamente. (O lo que tu quieras)
En fin, creo que eso es todo. Suerte.
Código (cpp) [Seleccionar]
#include <iostream>
#include <vector>
using namespace std;
const int MAX = 'z' - 'a' + 1;
int cript(const vector<char>& Dic, char c) {
for (int i = 0; i < MAX; ++i)
if (c == Dic[i]) return i;
return 0;
}
int main() {
vector<char> Dic(MAX);
while (true) {
cout << "Ponga el diccionario:" << endl << " - ";
for (int i = 0; i < MAX; ++i) cin >> Dic[i];
int cas;
cout << "Ponga numero de lineas:" << endl << " - ";
cin >> cas;
for (int i = 0; i < cas; ++i) {
string c;
cin >> c;
for(int j=0; j<c.length(); j++)
if (c[j] == '_') cout << " ";
else {
int k = cript(Dic, c[j]);
cout << char(k+ 'a');
}
cout << endl;
}
cout << endl;
}
}
Puse un par de couts explicando lo que pid een cada caso. Ahora te explico:
Tenías un "while(cin << c)". Eso hacía que no saliera del ciclo, y continuaba pidiendo caracteres.
Te convertí 'c' e un string, y lo cambié un poco.
Tenías 1 fallo, que erradicaba en un uso obligado de otro:
Tenías: "for(int i=1;i<MAX;i++) ..."
Por ese motivo, tenias que poner "while(cin >> c[0])" Ese '0' se evita ponerlo, si le I del for la inicializas en 0. Ademásde cambiar eso, podrías quitar el while, o dejarlo como lo puse yo, para que pida infinitamente. (O lo que tu quieras)
En fin, creo que eso es todo. Suerte.