#include <stdio.h>
#define N 10
int main()
{
int i, l = 0, b = 0, d = 0, o = 0;
char a[N];
gets_s(a);
for (int i = 0; i < N; i++)
{
if (a[i] >= 65 && a[i] <= 90 || a[i] >= 97 && a[i] <= 122)
{
l++;
}
else if (a[i] == 32)
{
b++;
}
else if (a[i] >= 48 && a[i] <= 57)
{
d++;
}
else
{
o++;
}
}
printf("letter=%d, blank=%d, digit=%d, other=%d", l, b, d, o);
return 0;
}
.global main
.section .rodata
.LC0:
.string "%d"
.LC1:
.string "nums : %d\n"
.LC2:
.string "letter : %d\n"
.text
main:
pushq %rbp
movq %rsp,%rbp
subq $0x1000,%rsp
movl $0,-16(%rbp) /* str */
movl $0,-20(%rbp) /* letter */
movl $0,-24(%rbp) /* nums */
movl $0,-28(%rbp) /* i */
leaq -16(%rbp),%rdi /* str */
call gets
movl $0,-28(%rbp) /* i */
jmp .Lmain_400
.Lmain_500:
movl -28(%rbp),%eax
movslq %eax,%rax
leaq -16(%rbp),%rdi
movb 0(%rdi,%rax,1),%al /* str[i] */
cmpb $97,%al /* a */
jl .Lmain_492
cmpb $122,%al /* z */
jg .Lmain_492
addl $1,-20(%rbp) /* letter */
.Lmain_492:
cmpb $65,%al /* A */
jl .Lmain_485
cmpb $90,%al /* Z */
jg .Lmain_485
addl $1,-20(%rbp) /* letter */
.Lmain_485:
cmpb $48,%al /* 0 */
jl .Lmain_480
cmpb $57,%al /* 9 */
jg .Lmain_480
addl $1,-24(%rbp) /* nums */
.Lmain_480:
addl $1,-28(%rbp) /* i */
.Lmain_400:
cmpl $10,-28(%rbp) /* i */
jl .Lmain_500
movl -24(%rbp),%esi /* nums */
leaq .LC1(%rip),%rdi
movl $0,%eax
call printf
movl -20(%rbp),%esi /* letter */
leaq .LC1(%rip),%rdi
movl $0,%eax
call printf
movl $0,%eax
leave
ret