Si los espacios no se pudieran repetir, entonces seria mas simple.
Primero fijemonos en los caracteres que pueden separar las palabras: '.' ,',' y ' '.
Son esos 3. El problema es que pueden repetirse, es decir "hola . Como, estas"
Ahi tendriamos 3 palabras, pero debido a que se encuentra un espacio con el punto y/o la coma, debemos prevenir esto.
Como detectar el fin de la palabra y sumar el contador? Eso lo hacemos cuando detectamos cualquiera de los caracteres especiales que desde ahora le llamo DELIMITADORES que son la coma, el punto y el espacio. El problema es la posibilidad de contar mas palabras de las que hay como ya dijimos debido a que puede haber mas delimitadores juntos.
La solucion para mi es que vas a necesitar de al menos 2 registros y una tabla con los "delimitadores".
1 registro para mantener la cuenta de las palabras
1 registro para mantener el caracter anterior..
Al comienzo cargamos nuestro registor de "Caracter anterior" con uno cualquiera de nuestros DELIMITADORES, suponete el espacio ' '.
Tenemos la primer letra.. Pueden ocurrir 2 cosas.
- Que el "caracter actual" sea un DELIMITADOR como seria el punto, la coma y el espacio. Lo cual apartir de aca nos queda verificar 2 cosas. Que el "caracter anterior" sea o no un delimitador, si lo es entonces no sumamos nada, cambiamos nuestro "caracter anterior" (poniendo el actual en el registro del anterior) y procedemos a leer la proxima letra. Y la otra que puede suceder es que el caracter anterior no sea un delimitador, esto quiere decir que termino la palabra y por lo tanto debo sumar 1
- O que sea una letra de una palabra, en este caso no hacemos nada.
Es decir el unico momento que voy a sumar 1 es cuando se cumple las siguientes condiciones:
- Caracter anterior distinto de cualquier de los delimitadores
- Caracter actual igual a uno de los delimitadores.
Hagamos un string de ejemplo:
" Hola, Como ,.Estas"
Creo que seria tu peor caso, teniendo en cuenta las condiciones que nombre antes, apenas comienza dijimos que cargamos si o si el caracter anterior con un delimitador, esto nos permite si hay un espacio, punto o coma al comienzo no sea contado como palabra, asi hasta llegar a la 'a' de Hola. es alli cuando nuestro registros quedarian:
Caracter anterior = 'a'
Caracter actual = ','
En ese punto es el unico que se cumple las condiciones dadas y procede a incrementar el registro de contador de palabras.
Por otro lado seria bueno que ademas de el punto, la coma y el espacio, tengas un caracter que delimite el string, Ya que programas en ASM esto no suele suceder. en C los string terminan en 0x00, entonces en ese caso que tengas una terminacion como en C agregues el 0x00 como un delimitador mas. Sino no contaria la ultima palabra.