Un amigo me ha retado a intentar programar esto en C, soy principiante y por mas que he intentado no lo he logrado.
Le dije que me rendía y que me dijera como hacerlo pero se nego jajaja.
Entrada
Un texto formado por caracteres alfabéticos y blancos. Cada palabra del texto está formada exclusivamente por caracteres alfabéticos y mide entre 1 y 10 caracteres de longitud.
Salida
La cantidad de veces que aparece la palabra "sak" o algo parecido: cualquier cadena de mayúsculas o minúsculas que empiece con una o más "s", siga con una o más "a" y termine con una o más "k".
(https://fotos.subefotos.com/a5bfe34c9fb8402e1fffdbbb2e42fb3ao.jpg)
Llevo esto hasta ahora.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char texto[300];
int longi, x=0;
int saltos=0;
gets(texto);
longi = strlen (texto);
for(x=0; x<longi; x++){
if(texto[x]==' ');
else{
if(texto[x]=='s'||texto[x]=='S'){
while(texto[x]=='s'||texto[x]=='S'){
x++;
}
if(texto[x]=='a'||texto[x]=='A'){
while(texto[x]=='a'||texto[x]=='A'){
x++;
}
if(texto[x]=='k'||texto[x]=='K'){
while(texto[x]=='k'||texto[x]=='K'){
x++;
}
if(texto[x]==' '||texto[x]=='\0'){
saltos++;
}
}
}
}
}
}
printf("%d", saltos);
}
Casi funciona bien. El problema es que cuenta palabras como "asak" o "tarsak" por que tiene las combinaciones de s, a y k.
muestra cual es el código que llevas para poder orientarte
Lo más sencillo es crear una máquina de estados. Es decir, tu buscas la secuencia ' sak', nótese el espacio delante.
Empiezas por un estado de 0 que quiere decir que no tienes ningún carácter de la secuencia.
Sólo cuándo encuentres el espacio pasas al estado 1.
Sigues en el estado 1 mientras encuentres espacios.
Si encuentras el carácter 's' o 'S' pasas al estado 2, si encuentras otro carácter diferente a la 's', 'S', o ' ', regresas al estado 0.
Estando en estado 2 sigues mirando caracteres. Si es una 's' o 'S' sigues en estado 2, si es 'a' o 'A' pasas al estado 3, si es otra situación regresas al estado 0.
Estando en estado 3 sigues mirando caracteres. Si es una 'k' o 'K' sigues en estado 3, si es un espacio ' ' has encontrado la secuencia y aumentas un contador y regresas al estado 0.
Pero te encontrarás con un problema: Si empiezas de esta forma y la primera palabra es sak NO te la contará. Te dejo que resuelvas eso.
en el if(texto
- ==' '); puedes ponerlo como
if(texto[x]!=' ')
y te quitas el else{}
después ya que sabemos que tenemos que comprobar el texto sak independiente mente de si tiene mayúsculas o no entonces espesamos por comprobar la primera letra sak si esta condición se cumple buscamos si la siguiente letra es a o A con un texto[x+1] y siesta comprobación también es correcta hacemos lo mismo para la siguiente con texto[x+2]
y si todo esto se cumple quiere decir que el texto sak se encuentra en esta palabra o frase
con lo que hacemos un saltos++ y listo ya lo tendríamos terminado