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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error " no match for call to `(std::string) (unsigned int&)' "
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error " no match for call to `(std::string) (unsigned int&)' "  (Leído 3,820 veces)
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Error " no match for call to `(std::string) (unsigned int&)' "
« en: 31 Enero 2013, 14:39 pm »

Buenass a todos.
Resulta que en clase de programación básica de C++, el tema de strings y arrays multidimensionales se me ha atascado. La profesora dice que nos busquemos la vida para resolver sus ejercicios (tranquilos, no os voy a pedir que me hagáis nada. Quiero aprender :) )

Aún no hemos usado clases. Solo procedimientos y funciones, y mi error está en una función que me devuelva un booleano diciendo si dos palabras (en mayúsculas) son o no son anagramas. (Son anagramas si cambiando las letras de orden de una de ellas podemos obtener la otra "caso y saco")



Lo que pretendo es crear dos arrays de 27 int que representen las 27 letras, y que con un bucle for vaya sumando 1 a cada posición cada vez que aparezca la letra. De esta manera acabo comparando los dos arrays y si son iguales, serán anagramas. Espero haberme explicado.

El error lo pueden ver. Me trae loco aunque seguro será una tontería xD

S@lu2 ;)

PD: si tengo más dudas de la misma relación de ejercicios y que no encuentro en la net los pongo en este mismo post?? Creo que podría servir de ayuda a otros como yo ;)


« Última modificación: 31 Enero 2013, 15:06 pm por NikNitro! » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error " no match for call to `(std::string) (unsigned int&)' "
« Respuesta #1 en: 31 Enero 2013, 15:41 pm »

Código
  1. array1[pall[i]-65];

Esta sentencia no hace nada. Si lo que quieres es asignarle al array el valor de pall:

Código
  1. array1[i] = pall[i] -65;

Lo mismo con el otro array.


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
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Error " no match for call to `(std::string) (unsigned int&)' "
« Respuesta #2 en: 31 Enero 2013, 15:52 pm »

El problema esta en estas dos lineas:
Código
  1. array1[pal1(i)-65];
  2. array2[pal2(j)-65];

Para acceder al caracter que haya en un indice de un string debes usar el operador [], no (). Al usar los parentesis estas haciendo una llamada al constructor de la clase, de ahi el error.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: Error " no match for call to `(std::string) (unsigned int&)' "
« Respuesta #3 en: 31 Enero 2013, 15:54 pm »

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Aiss, toqueteando se me olvido poner el ++ al final antes de hacerle la foto para que sumara 1 -.-'

Pero vamos, que me has dado la respuesta ^^ estaba utilizando paréntesis en vez de corchetes para definir la posición de los caracteres de la string xP

Aquí está el trozo de código sin fallos:

Código:
	if(pal1.size() == pal2.size()) {

for (unsigned i = 0; i<pal1.size(); i++){
unsigned a = pal1[i]-65;
array1[a]++;
}
for (unsigned j = 0; j<pal1.size(); j++){
unsigned b = pal2[j]-65;
array2[b]++;
}
}

De camino lo he puesto con una variable para que se vea más claro :)

S@lu2 y gracias ;)

PD: si tengo más dudas de la misma relación de ejercicios y que no encuentro en la net los pongo en este mismo post?? Creo que podría servir de ayuda a otros como yo ;)

Qué me decís de eso?

EDITADO: @0xDani Así es. Gracias a ti también :)
En línea

Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Error " no match for call to `(std::string) (unsigned int&)' "
« Respuesta #4 en: 31 Enero 2013, 16:14 pm »

¿No es más fácil pasar ambas cadenas a minúsculas, hacerles un sort y comparar resultados?
Si tiene las mismas letras, por ordenamiento numérico terminarían en el mismo lugar y las cadenas deberían ser "equivalentes".

Grosero ejemplo:
Código
  1. bool isAnagram(string firstWord, string secondWord){
  2.  
  3.    // To lowercase
  4.    transform (firstWord.begin(), firstWord.end(), firstWord.begin(), ::tolower);
  5.    transform (secondWord.begin(), secondWord.end(), secondWord.begin(), ::tolower);
  6.  
  7.    // Sort
  8.    sort(firstWord.begin(),firstWord.end(), greater<char>() );
  9.    sort(secondWord.begin(),secondWord.end(), greater<char>() );
  10.  
  11.    return (firstWord == secondWord);
  12.  
  13. }
  14.  

Te olvidas completamente de los for anidados.

Saludos.

« Última modificación: 31 Enero 2013, 16:33 pm por Alex Mtx » En línea

NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: Error " no match for call to `(std::string) (unsigned int&)' "
« Respuesta #5 en: 31 Enero 2013, 18:51 pm »

La verdad es que si, pero como ya dije son ejercicios de clase, y aún no hemos dado métodos -.-, y de strings ha dicho que son cadenas de caracteres, que se pueden concatenar, comparar, acceder a terminos dentro de ellas y pasarlas por referencia en vez de por parametros... Tiene a la clase muy liada, la verdad :s
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error " no match for call to `(std::string) (unsigned int&)' "
« Respuesta #6 en: 4 Febrero 2013, 18:16 pm »

La verdad es que si, pero como ya dije son ejercicios de clase, y aún no hemos dado métodos
El problema: ya los están utilizando al llamar a la función miembro "size" de los objetos "pal1" y "pal2".

La mejor solución ya la dio Alex Mtx, si debido a los requisitos en clase solo deben utilizar arrays de caracteres deben tener cuidado con esto:
Código
  1. anag = (array1==array2);
Ello porque en el caso de los arrays (de cualquier tipo) cuando se utiliza el operador "==" no se comparan sus contenidos, se comparan sus direcciones en memoria, en tu caso esa comparación siempre resultara en el valor false.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines