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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Contar cuantas veces aparece una palabra en una frase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Contar cuantas veces aparece una palabra en una frase  (Leído 3,457 veces)
minikarpin

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Contar cuantas veces aparece una palabra en una frase
« en: 13 Marzo 2017, 10:45 am »

Hola, llevo unos días buscando información y no se como resolverlo.
Tengo que buscar una palabra en una frase introducida, el problema es que no se como contar posiciones o como ir sumandolas.
-No puedo usar for (no nos deja usarlo la profesora).

Código
  1. @echo off
  2.  
  3. setlocal enabledelayedexpansion
  4.  
  5. set cont=0
  6. :frase1
  7. set frase=""
  8. set /p frase= Introduce una frase:
  9. if !frase! EQU "" (
  10. echo No dejes en blanco la frase
  11. goto frase1
  12. )
  13. :palabra1
  14. set palabra=""
  15. set /p palabra= Introduce una palabra:
  16. if !palabra! EQU "" (
  17. echo No dejes en blanco la palabra
  18. goto palabra1
  19. )
  20.  
  21. :bucle
  22.  
  23. if %palabra% EQU %frase:~1% (
  24. set /a cont=%cont%+1
  25. goto bucle
  26. )else (
  27. goto fin
  28. )
  29.  
  30.  
  31.  
  32.  
  33. :fin
  34. echo sdf %palabra% sdf %frase%
  35. echo cont !cont!

Acabo de empezar y estoy un poco perdido, gracias por la ayuda.



· Los códigos deben ir en etiquetas GeSHi (asumí que es batch...)
>aquí las reglas del foro
-Engel Lex


« Última modificación: 13 Marzo 2017, 10:46 am por engel lex » En línea

yottaXT

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Contar cuantas veces aparece una palabra en una frase
« Respuesta #1 en: 15 Marzo 2017, 02:47 am »

Mira soy novato en batch, pero bueno como no hay mas comentarios te dare una idea quizás sea tu solución quizás no.

Has probado con los comandos find o findstr? si entendí bien tu pregunta creo que tienen las funciones que andas buscando.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Contar cuantas veces aparece una palabra en una frase
« Respuesta #2 en: 16 Marzo 2017, 04:58 am »

Tengo que buscar una palabra en una frase introducida, el problema es que no se como contar posiciones

No puedo usar for (no nos deja usarlo la profesora).

Pues entonces no es un ejercicio práctico. Sinceramente esa profesora no debería estar enseñando algoritmos recursivos ni otras metodologías que sean rebuscadas para conseguir hacer lo que hace un FOR de la única forma eficiente en Batch, por que eso son malos hábitos de programación y tiene sus consecuencias.

El modo eficiente de determinar la posición de un caracter en una cadena de texto es usando un FOR para poder iterar los caracteres y así ir sumando sus índices. La otra metodología sería usando etiquetas (Call, GoTo. Labels), saltanto de una parte del código a otro y esto en según que circunstancias (demasiado recursividad saltos/llamadas consecutivas) inevitablemente desbordará la cola de la pila de llamadas generando un error de desbordamiento de la pila de llamadas, valga la redundancia.

De verdad te lo digo, es un peligro acostumbrarse a hacer estas malas prácticas y tomarlo como costumbres, por que esto solo servirá para conseguir ser un mal programador que tienda a crear código spaguetti, mal estructurado y con alto riesgo de errores. Pero en fin, si te han pedido hacerlo de la manera menos práctica en la programación entonces aquí te enseño el modo:

Código
  1. @echo OFF
  2.  
  3. Set "str=Hello World!"
  4. Set "find=world"
  5.  
  6. Call :FindStrPos "%str%" "%find%" Y :: Result: 7
  7. Echo:%Pos%
  8.  
  9. Call :FindStrPos "%str%" "hello" N :: Result: 0 (nul, because "N" of sensitive case search)
  10. Echo:%Pos%
  11.  
  12.  
  13.  
  14.  
  15. :FindStrPos :: %1=InputString, %2=FindString, %3=IgnoreCase(Y/N)
  16. If Not Defined funcPos   (Set /A "funcPos=0")
  17. If Not Defined funcInput (Set "funcInput=%~1")
  18. If Not Defined funcFind  (Set "funcFind=%~2")
  19. If /I "%~3" EQU "Y" If Not Defined ignoreCase (Set "ignoreCase=/I")
  20. Set /A "funcPos+=1"
  21. (
  22. Echo:%funcInput%|FindStr %ignoreCase% /B /C:"%funcFind%"
  23. )1>NUL || (
  24. Set "funcInput=%funcInput:~1%"
  25. If Defined funcInput (GoTo :FindStrPos)
  26.        Set /A "funcPos=0"
  27. )
  28. Set "Pos=%funcPos%"
  29. Set /A "funcPos=0"
  30. Set "funcInput="
  31. Set "funcFind="
  32. Set "ignoreCase="
  33. Exit /B 0

¡Saludos!
« Última modificación: 16 Marzo 2017, 05:06 am por Eleкtro » 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