- nbr lignes:
Compter le nbr d'octets qui valent 10 (separateur de ligne) et enfin ajouter 1.
- nbr paragraphes:
Je pense meme principe selon ce que tu as comme séparateur (au lieu de 10) de paragraphes.
- nbr mots:
Ouh là c'est nettement plus complexe, dépendra d'un alphabet de séparateurs de mots pour les déterminer.
Juste pour le fun, exemple x64 utilisant le jeu d'instructions SSE 4.2
__declspec(align(16)) BYTE btALPHAFULL[16] = {39, 39, 48, 57, 65, 90, 97, 255, 0};
char szB[] = "aatqaabSE tstSSE tstSSE tstSSE tstSSE";
Comptons le nbr de mots dans szB:
UINT64 v = CompteMots(szB, btALPHAFULL);
; UINT64 CompteMots(char *psz, char *pALIGN16alphaRange)
CompteMots PROC
movdqa xmm3, [rdx]
movdqu xmm1, [rcx]
xor edx, edx
pcmpistrm xmm3, xmm1, 04h
movdqa xmm4, xmm0
movdqa xmm1, xmm0
psrld xmm4, 15
movdqa xmm5, xmm1
psllw xmm5, 1
pxor xmm5, xmm0
pextrd eax, xmm5, 0
jz short lastFRAGMENT
popcnt eax, eax
add rcx, 16
add rdx, rax
next16:
movdqu xmm1, [rcx]
pcmpistrm xmm3, xmm1, 04h
movdqa xmm5, xmm4
movdqa xmm4, xmm0
psrld xmm4, 15
movdqa xmm1, xmm0
psllw xmm1, 1
por xmm5, xmm1
pxor xmm5, xmm0
pextrd eax, xmm5, 0
jz short lastFRAGMENT
popcnt eax, eax
add rcx, 16
add rdx, rax
jmp short next16
lastFRAGMENT:
popcnt eax, eax
add rax, rdx
shr rax, 1
ret 0
CompteMots ENDP
ciao...
BruNews, MVP VC++