Autor
|
Tema: Error " no match for call to `(std::string) (unsigned int&)' " (Leído 3,820 veces)
|
NikNitro!
Desconectado
Mensajes: 1.309
Galletaaa!!!
|
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
Mensajes: 1.211
|
array1[pall[i]-65];
Esta sentencia no hace nada. Si lo que quieres es asignarle al array el valor de pall :
array1[i] = pall[i] -65;
Lo mismo con el otro array.
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
El problema esta en estas dos lineas: array1[pal1(i)-65]; 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
Mensajes: 1.309
Galletaaa!!!
|
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: 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
Mensajes: 2.407
Deprecated
|
¿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: bool isAnagram(string firstWord, string secondWord){ // To lowercase transform (firstWord.begin(), firstWord.end(), firstWord.begin(), ::tolower); transform (secondWord.begin(), secondWord.end(), secondWord.begin(), ::tolower); // Sort sort(firstWord.begin(),firstWord.end(), greater<char>() ); sort(secondWord.begin(),secondWord.end(), greater<char>() ); return (firstWord == secondWord); }
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
Mensajes: 1.309
Galletaaa!!!
|
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
Mensajes: 1.639
|
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: 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
"Call" no funciona con textbox pero, sí, con "cualquiertexto"
« 1 2 »
Programación Visual Basic
|
usuario oculto
|
12
|
6,606
|
16 Julio 2011, 17:05 pm
por usuario oculto
|
|
|
Extraer string entre "[" y "]"
Programación Visual Basic
|
extreme69
|
6
|
3,341
|
17 Septiembre 2011, 16:30 pm
por Psyke1
|
|
|
Escritoro inaccesible: Error de "ATBroker.exe" "Explorer.exe" y "Taskmgr.exe".
Windows
|
Eleкtro
|
6
|
13,642
|
1 Diciembre 2011, 14:15 pm
por .:UND3R:.
|
|
|
Maple Match: La web para los estadounidenses que quieran huir del "horror" de...
Noticias
|
wolfbcn
|
1
|
1,712
|
23 Mayo 2016, 02:10 am
por engel lex
|
|
|
Error "no match for operators"
Programación C/C++
|
MauriiOrtiz09
|
1
|
2,715
|
15 Febrero 2022, 23:25 pm
por Eternal Idol
|
|