String_16-Contar+apariciones+de+subcadena+en+cadena

=__**Contar apariciones de subcadena en cadena**__=

> Codificar un subprograma que cuenta cuántas veces aparece una subcadena en una cadena. > Hace un programa que utilice el subprograma anterior

code format="pascal" PROGRAM Contar_Apariciones_Subcadena ; USES Crt ; TYPE tsCadena = String[80] ;

FUNCTION fnbyNumeroApariciones (sSubcadena, sCadena : tsCadena) : Byte ; VAR byInicCad, byContador, iLongSub : Byte ; BEGIN byContador := 0 ;

iLongSub := Length (sSubcadena) ;

byInicCad :=  POS (sSubcadena, sCadena);

WHILE byInicCad <> 0 DO     BEGIN byContador := byContador + 1 ;

Delete (sCadena, 1, byInicCad + iLongSub - 1) ;

byInicCad :=  POS (sSubcadena, sCadena); END;

fnbyNumeroApariciones := byContador ; END ;

VAR {- Variables del programa principal ---} sCadena, sSubcadena : tsCadena ; byApariciones      : Byte ;

BEGIN { Programa principal --} Writeln ; Writeln ('Programa que cuenta las veces que una subcadena aparece en una frase') ; Writeln ;

Write ('            Escribe una frase: ') ; ReadLn (sCadena) ;

Write ('Escribe la subcadena a buscar: ') ; ReadLn (sSubCadena) ; Writeln ; byApariciones := fnbyNumeroApariciones (sSubcadena, sCadena) ;

IF byApariciones = 1 THEN Writeln ('La cadena contiene ', byApariciones, ' vez la subcadena') ELSE Writeln ('La cadena contiene ', byApariciones, ' veces la subcadena') ; WriteLn ;

Write ('Pulsa RETURN para terminar') ; ReadLn ; END. { fin de Contar_Apariciones_Subcadena.PAS } code code format="pascal" FUNCTION fnbyNumeroApariciones (sSubcadena, sCadena : tsCadena) : Byte ; VAR byInicCad, byContador, iLongSub : Byte ; BEGIN byContador := 0 ;
 * ** Otra versión **

iLongSub := Length (sSubcadena) ;

byInicCad :=  POS (sSubcadena, sCadena);

WHILE byInicCad <> 0 DO     BEGIN byContador := byContador + 1 ; sCadena := Copy (sCadena, byInicCad + iLongSub, Length (sCadena)) ; byInicCad :=  POS (sSubcadena, sCadena); END; fnbyNumeroApariciones := byContador ; END ; code