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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Encontrar si un carácter está dentro un string
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Encontrar si un carácter está dentro un string  (Leído 2,008 veces)
pirojoke

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Encontrar si un carácter está dentro un string
« en: 4 Febrero 2018, 02:17 am »

Buenas! Pues el problema es que el visual no da ningún resultado al ejecutar el códico y no puedo encontrar dónde me he equivocado.


Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int EncontrarCaracter(char cad[], char n)
  5. {
  6. int i = 0;
  7. int res = 0;
  8.  
  9. while ((res == 0) || (cad[i] != '\0')) {
  10. if (cad[i] == n)
  11. res = 1;
  12. else
  13. i++;
  14. }
  15. return res;
  16. }
  17.  
  18. int main()
  19. {
  20. int resultado;
  21. char cadena[100], n;
  22. cin >> cadena >> n;
  23. resultado = EncontrarCaracter(cadena, n);
  24. cout << resultado << endl;
  25. system("PAUSE");
  26. return 0;
  27. }


En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: Encontrar si un carácter está dentro un string
« Respuesta #1 en: 4 Febrero 2018, 05:39 am »

Buenas, antes que nada una explicación para novatos. El C++ es C orientado a objetos, eso significa que C++ trabaja con objetos. Los objetos tienen muchas peculiaridades y entre ellas que puedes usar métodos etc.. (no entraré en más detalle en POO).

Luego lo segundo, eso no es un string. Eso que tienes declarado es un literal de caracteres, cadena? (que podría ser la traducción literal de string) o array de chars o caracteres o montón de cosas pero no un string (objeto). Un string es un objeto en C++ y tiene métodos como antes cité. Entre los métodos disponibles tienes el find(), que es para encontrar ya no un carácter sino también palabras o cadenas.

Se incluye con su correspondiente cabecera <string>
http://www.cplusplus.com/reference/string/

Info y how to del string en visual c++ (hay un ejemplo con el find()):
https://msdn.microsoft.com/es-es/library/syxtdd4f.aspx


En línea

dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Encontrar si un carácter está dentro un string
« Respuesta #2 en: 4 Febrero 2018, 13:22 pm »

Como mínimo, en la condición del bucle while.

Código
  1. while ((res == 0) || (cad[i] != '\0')) {

Cambiando el operador || (OR) por && (AND)

Código
  1. while ((res == 0)  && (cad[i] != '\0')  ) {

De todas formas, aunque este disponible como

Código
  1. #include <string.h>
  2.  
  3. char *strchr(const char *s, int c);
  4.  

como ejercicio de programación , yo haría esta:

Código
  1. int EncontrarCaracter(const char cad[], const char n)
  2. {
  3.  const char *c;
  4.  for ( c=cad; *c && (*c!=n);c++);
  5.  return *c;
  6. }

Es un poco crípitica, pero my C-style... Devuelve 0 si no esta, o el valor decimal del caracter ASCII si esta...


Ojo! Sería ambiguo preguntar por el caracter "\0", ya que en toda cadena de C, está, y devolvería precisamente 0, que es su valor en decimal...

Entoces... está o no está? Parece que está, pero el convenio escogido dice que no. Ojo!

La "strchr" dice que devuelve un PUNTERO a la primera ocurrencia de ese valor... El caracter nulo "\0" es considerado PARTE de la cadena.
« Última modificación: 12 Febrero 2018, 10:55 am por dijsktra » En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: Encontrar si un carácter está dentro un string
« Respuesta #3 en: 4 Febrero 2018, 20:50 pm »

El problema que tiene es cuando captura los datos. No es recomendable pero PARA NADA mezclar tipos de datos en la misma entrada cin. Si solo quiere hacer que funcione ese código simplemente debería usar los métodos correspondientes, uno para la cadena de chars (cin.getline()) y el otro para capturar el caracter (cin.get()). También sería bueno que cogieras buenas prácticas poniendo nombres que den a entender algo o algo tan claro poner un mensaje antes del cin y así no atrofias las articulaciones de los dedos.

https://msdn.microsoft.com/en-us/library/aa277361(v=vs.60).aspx

https://msdn.microsoft.com/en-us/library/aa277360(v=vs.60).aspx

y totalmente de acuerdo, no me había fijado en ese detalle... casi mejor que sustituya además del OR por un AND el \0 por un salto de línea (\n) o use un contador hasta 100 (el espacio reservado para el array)...

Como mínimo, en la condición del bucle while.

Código
  1. while ((res == 0) || (cad[i] != '\0')) {

Cambiando el operador || (OR) por && (AND)

Código
  1. while ((res == 0)  && (cad[i] != '\0')  ) {

...
...

Ojo! Sería ambiguo preguntar por el caracter "\0", ya que en toda cadena de C, está, y devolvería precisamente 0, que es su valor en decimal...

Casi mejor usar funciones de C y luego cuando sepas POO comenzar a usar objetos.
« Última modificación: 4 Febrero 2018, 20:58 pm por srWhiteSkull » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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