elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [Resuelto]¿Cómo puedo solucionar este error en el uso de vectores con strings?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto]¿Cómo puedo solucionar este error en el uso de vectores con strings?  (Leído 1,087 veces)
OmarHack


Desconectado Desconectado

Mensajes: 1.075


El más grande.


Ver Perfil
[Resuelto]¿Cómo puedo solucionar este error en el uso de vectores con strings?
« en: 19 Junio 2013, 04:42 »

En el siguiente código resulta que al poner textos[3] dentro de un if el programa me obliga a llenar el vector. Pero claro está que no siempre se va a llenar.

Si no lo lleno, es decir, si pongo menos de cuatro palabras separadas por espacios en la ejecución del programa me da el error: "Violación de acceso a memoria restringida (segmentacion fault) error en el programa" La pregunta es, ¿Cómo lleno el vector sin saber el número de palabras que va a poner el usuario?

Por si sirve de algo el programa va a estar en un while infinito ejecutándose una y otra vez, tengo que crear y destruir el vector cada vez que empieza el bucle de 0 o así está bien?

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <vector>
  5. using namespace std;
  6.  
  7.  
  8. int main()
  9. {
  10.     string texto;
  11.     cout << "Que quiere traducir?: ";
  12.     getline(cin, texto);
  13.  
  14.     istringstream is(texto);
  15.     vector <string> textos;
  16.  
  17.  
  18.     while( is >> texto )
  19.          textos.push_back( texto );
  20.     cout <<"Las palabras que pusiste son: " <<endl;
  21.     for (unsigned int i = 0; i < textos.size(); i++)
  22.          {
  23.          cout << i + 1 << ". " << textos[i] << endl;
  24.          }
  25.  
  26.          if (textos[0] == "coche" )
  27. {
  28. cout << endl << "En ingles coche es car" << endl;
  29. }
  30.          if (textos[0] == "hola" )
  31. {
  32. cout << "En ingles hola es hello" << endl;
  33. }
  34.  
  35.          if (textos[1] == "hola" )
  36. {
  37. cout << "En ingles hola es hello" << endl;
  38. }
  39.  
  40.          if (textos[2] == "hola" )
  41. {
  42. cout << "En ingles hola es hello" << endl;
  43. }
  44.  
  45.  
  46.          if (textos[3] == "hola" )
  47. {
  48. cout << "En ingles hola es hello" << endl;
  49. }
  50.  
  51.     system("pause");
  52.     return 0;
  53. }

A ver si me podéis echar una manita! :)
Saludos.


« Última modificación: 20 Junio 2013, 02:46 por OmarHack » En línea

Tengo más aspiraciones que un ataque asmático.
Lo mejor es lo que queda por venir. ¿Quienes de los que estáis hoy aquí se va a rendir?
ecfisa

Desconectado Desconectado

Mensajes: 107


Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #1 en: 19 Junio 2013, 11:32 »

Hola Omar.

El problema lógico que veo en ese código es que el resultado va a depender del órden de ingreso, es decir que si ingresa "coche" en tercer lugar, nunca lo va a traducir.

Otro problema, mas grave, es que si por ejemplo ingresas dos palabras, los errores aparecerían luego del segundo if. Ya que a partir de ahí, estarías intentando acceder a posiciónes inexistentes del vector. (de allí la violación de acceso)

Una forma un poco distinta de implementarlo podría ser:
Código
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. struct {
  9.  char *spa;
  10.  char *eng;
  11. } traduc[] = {"coche","car","hola","hello","perro","dog",
  12.              "casa","house","ciudad","city","cielo",
  13.              "sky","vaca","cow","ojos","eyes"};
  14.  
  15. int main()
  16. {
  17.  string str;
  18.  vector <string> texto;
  19.  unsigned i,j;
  20.  
  21.  cout << "Que quiere traducir?: ";
  22.  getline(cin, str);
  23.  stringstream is(str);
  24.  while(is >> str) texto.push_back(str);
  25.  
  26.  cout <<"Las palabras que pusiste son: " << endl;
  27.  for (i = 0; i < texto.size(); i++)
  28.    cout << i + 1 << ". " << texto[i] << endl;
  29.  cout << endl;
  30.  
  31.  for(i = 0; i < texto.size(); i++)
  32.    for(j = 0; j < sizeof(traduc)/sizeof(traduc[0]); j++)
  33.      if(strcmp(texto[i].c_str(), traduc[j].spa) == 0)
  34.        cout << traduc[j].spa << " en ingles es " << traduc[j].eng << endl;
  35.  
  36.  cin.get();
  37.  return 0;
  38. }
  39.  

Saludos  :)


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #2 en: 19 Junio 2013, 12:17 »

Otra propuesta de código:

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <vector>
  5. #include <map>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.    unsigned int i;
  12.    string str;
  13.    vector <string> texto;
  14.    map<string,string> Diccionario;
  15.  
  16.    Diccionario["coche"] = "car";
  17.    Diccionario["hola"] = "hello";
  18.    Diccionario["perro"] = "dog";
  19.    Diccionario["casa"] = "house";
  20.    Diccionario["ciudad"] = "city";
  21.    Diccionario["cielo"] = "sky";
  22.    Diccionario["vaca"] = "cow";
  23.    Diccionario["ojos"] = "eyes";
  24.  
  25.    cout << "Que quiere traducir?: ";
  26.  
  27.    getline(cin, str);
  28.    stringstream is(str);
  29.  
  30.    while(is >> str) texto.push_back(str);
  31.  
  32.    cout <<"Las palabras que pusiste son: " << endl;
  33.  
  34.    for (i = 0; i < texto.size(); i++)
  35.        cout << i + 1 << ". " << texto[i] << endl;
  36.  
  37.    cout << endl;
  38.  
  39.    for(i = 0; i < texto.size(); i++)
  40.                cout << texto[i] << " en ingles es " << Diccionario[texto[i]] << endl;
  41.  
  42.    cin.get();
  43.    return 0;
  44. }
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
OmarHack


Desconectado Desconectado

Mensajes: 1.075


El más grande.


Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #3 en: 19 Junio 2013, 13:22 »

Tiene buena pinta amchacon, al cojer el ordenador lo pruebo. Una duda sobre tu código, si pongo en la ejecución: hola coche casa coche hola ojos
Me devolverán todos los couts que les ponga a cada uno?
Y después necesito comparar con ifs ejemplo: if (diccionario[coche] == "coche") mifuncion();
Tú siempre solucionándome los problemas!! :)
En línea

Tengo más aspiraciones que un ataque asmático.
Lo mejor es lo que queda por venir. ¿Quienes de los que estáis hoy aquí se va a rendir?
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #4 en: 19 Junio 2013, 13:44 »

Tú siempre solucionándome los problemas!! :)
Eh, que el código de eficsa también vale :)

Tiene buena pinta amchacon, al cojer el ordenador lo pruebo. Una duda sobre tu código, si pongo en la ejecución: hola coche casa coche hola ojos
Me devolverán todos los couts que les ponga a cada uno?
Claro

Y después necesito comparar con ifs ejemplo: if (diccionario[coche] == "coche") mifuncion();
Tú siempre solucionándome los problemas!! :)
No no, ese era otro ejemplo en el que había punteros a funcion.

El código que te he puesto funciona tal cual.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
OmarHack


Desconectado Desconectado

Mensajes: 1.075


El más grande.


Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #5 en: 19 Junio 2013, 14:16 »

El de ecfisa no me sirve, por supuesto gracias por ayudarme.
Yo no quiero un diccionario, quiero saber usar eses tipos de datos en casos como puede ser un diccionario. En este caso con que me de respuestas, independientemente de si es un cout o una funcion me sirve.
Por casualidad no sabreis solucionar los fallos de mi código no? Es que ni idea de por que pasa :S
Saludos.
En línea

Tengo más aspiraciones que un ataque asmático.
Lo mejor es lo que queda por venir. ¿Quienes de los que estáis hoy aquí se va a rendir?
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #6 en: 19 Junio 2013, 14:19 »

Por casualidad no sabreis solucionar los fallos de mi código no?
No compruebas el tamaño del vector, si te introduzco 2 palabras y me compruebas 3 pues...

Ya te he puesto 2 ejemplo usando maps, a aprendértelo  ;-)
http://minidosis.org/C++/Maps/
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
OmarHack


Desconectado Desconectado

Mensajes: 1.075


El más grande.


Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #7 en: 19 Junio 2013, 20:50 »

No compruebas el tamaño del vector, si te introduzco 2 palabras y me compruebas 3 pues...

Ya te he puesto 2 ejemplo usando maps, a aprendértelo  ;-)
http://minidosis.org/C++/Maps/
¿Y es muy lioso arreglarlo? Es decir, yo con un máximo de 10 palabras simultaneas me conformo, y después que el programa no tenga problema tanto si pongo 1 palabra como 2, como 3, o como 10. Mira que le di mil vueltas, ahora me pongo con tu código a estudiarlo a adaptarlo y a implementar la clase maps cuando lo tenga listo. :)
En línea

Tengo más aspiraciones que un ataque asmático.
Lo mejor es lo que queda por venir. ¿Quienes de los que estáis hoy aquí se va a rendir?
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #8 en: 19 Junio 2013, 21:01 »

Esque tú código no hay por donde cogerlo.

Supongo que querías hacer esto:

Código
  1. for (int i = 0; i < Texto.size();i++)
  2. {
  3.  if (Texto[i] == "hola")
  4.  {
  5.     cout<<"hello";
  6.  }
  7.  if (Texto[i] == "coche")
  8.  {
  9.     cout<<"car";
  10.  }
  11.  if (Texto[i] == "eyes")
  12.  {
  13.     cout<<"Ojos";
  14.  }
  15. }

Funcionaría, pero es una forma muy fea y no muy eficiente.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
OmarHack


Desconectado Desconectado

Mensajes: 1.075


El más grande.


Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #9 en: 19 Junio 2013, 22:02 »

El tuyo va perfecto! Lo acabo de probar y hace justo lo que quiero, pero no sé como usarlo en los ifs, quiero que si pongo hola no solo me ponga hello de respuesta, si no que ejecute una serie de acciones, como podrías ser llamar a otro ejecutable, imprimir un texto, o llamar a una función. Voy a intentar explicártelo a ver si entiendes, quiero algo así como lo siguiente, pero si escribo en el programa en ejecución por ejemplo: 2 hola 1 2 3 1 2 1 hola 1 se ejecuten por orden todas esas que e llamado. Con el código que me pusiste no se puede hacer no? Es para lo que hice yo el mio, pero me da el error ese de que si pongo menos de 10 argumentos en ejecución me da error.
Si lo pongo tal cual en un string, no puedo poner más de un parámetro por vez en la ejecución. Y eso es lo que me interesa, que pueda poner una frase con lo que sea por ejemplo: "hola 1 que tal" o "tal que hola 1" y haga cada cosa que tenga declarada como en el código siguiente. Entonces al poner "hola 1 que tal" el programa lo interpretaría como:

hola >> llama a una funcion, imprime un texto y cambia el valor a 2 variables
1 >> llama a una funcion y imprime un texto
que >> muestra el texto "no existe"
tal >> muestra el texto "no existe"


Y si en cambio pongo "que tal 2 hola" el programa lo interprete así:

que >> muestra el texto "no existe"
tal >> muestra el texto "no existe"
2 >> muestra el valor de 3 variables
hola >> llama a una funcion, imprime un texto y cambia el valor a 2 variables

En principio mi código hace eso, pero tiene el fallo que comente, con el tuyo no sé como hacerlo.  :(


Código:
if (texto == "1")
{
llama a la funcion;
imprime un texto;
}
 
if (texto == "2")
{
muestra el valor de 3 variables;
}

if (texto == "1")
{
cambia el valor a 2 variables;
}

if (texto == "3")
{
salir del programa o reiniciar
}

if (texto == "hola")
{
llama a una funcion;
imprime un texto;
cambia el valor a 2 variables;
}

if (texto == "casa")
{
..........
}

if (texto == "ordenador")
{
}

else cout <<"no existe";

En línea

Tengo más aspiraciones que un ataque asmático.
Lo mejor es lo que queda por venir. ¿Quienes de los que estáis hoy aquí se va a rendir?
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #10 en: 19 Junio 2013, 22:59 »

Reciclo un código anterior:

Código
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <sstream>
  5.  
  6. using namespace std;
  7.  
  8. typedef void (*Puntero_A_Funcion)(void);
  9.  
  10. void Copiar();
  11. void Escribir();
  12. void Cortar();
  13.  
  14. int main()
  15. {
  16.    void (*Funcion)(void); // Puntero a funcion sin argumentos
  17.    string Mensaje;
  18.    map<string,Puntero_A_Funcion> Comandos;
  19.    vector<string> texto;
  20.    string str;
  21.  
  22.    Comandos["write"] = Escribir;
  23.    Comandos["copy"] = Copiar;
  24.    Comandos["cut"] = Cortar;
  25.  
  26.    getline(cin, str);
  27.    stringstream is(str);
  28.  
  29.    while(is >> str) texto.push_back(str);
  30.  
  31.    cout <<"Las palabras que pusiste son: " << endl;
  32.  
  33.    for (int i = 0; i < texto.size(); i++)
  34.        cout << i + 1 << ". " << texto[i] << endl;
  35.  
  36.    cout << endl;
  37.  
  38.    for (int i = 0; i < texto.size(); i++)
  39.    {
  40.        Funcion = Comandos[texto[i]]; // Obtengo el puntero a la funcion correspondiente
  41.  
  42.        if (Funcion) // Si existe la funcion
  43.              Funcion(); // llamar a la funcion
  44.        else
  45.             cout<<"Error, no existe el comando introducido: "<<texto[i]<<endl;
  46.    }
  47.  
  48.    return 0;
  49. }
  50.  
  51. void Escribir()
  52. {
  53.    cout<<"Has escrito write"<<endl;
  54. }
  55.  
  56. void Cortar()
  57. {
  58.    cout<<"Has escrito cortar"<<endl;
  59. }
  60.  
  61. void Copiar()
  62. {
  63.    cout<<"Has escrito copiar"<<endl;
  64. }

En la misma función puedes escribir también el texto
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
OmarHack


Desconectado Desconectado

Mensajes: 1.075


El más grande.


Ver Perfil
Re: ¿Cómo puedo solucionar este error en el uso de vectores con strings?
« Respuesta #11 en: 20 Junio 2013, 01:33 »

Expléndido! Ahora a adaptarlo! :)
Gracias de verdad.
En línea

Tengo más aspiraciones que un ataque asmático.
Lo mejor es lo que queda por venir. ¿Quienes de los que estáis hoy aquí se va a rendir?
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como puedo sacar este error
Seguridad
atlanty 3 667 Último mensaje 3 Mayo 2005, 15:09
por Randomize
alguien puede solucionar este error?
Foro Libre
M-a-t-d 3 698 Último mensaje 22 Abril 2007, 19:05
por the_often
como solucionar error que notifica windows...
Windows
Damare 0 280 Último mensaje 4 Febrero 2014, 05:45
por Damare
MOVIDO: como solucionar error que notifica windows...
Dudas Generales
Songoku 0 206 Último mensaje 4 Febrero 2014, 15:01
por Songoku
montar sus strings como quieras « 1 2 »
Programación Visual Basic
DELPHI-XE6 16 1,614 Último mensaje 19 Agosto 2014, 23:48
por seba123neo
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines