这里提供 x86 汇编语言的代码,可以在 Windows 上使用 MASM 汇编器编译运行。

.model flat, stdcall
option casemap:none

include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

include \masm32\include\msvcrt.inc
includelib \masm32\lib\msvcrt.lib

.data
    prompt db '请输入字符串: ',0
    buffer db 256 dup(0)
    word_count dd 0
    number_count dd 0
    is_word db 1 ; 标记当前字符是否为单词
    is_number db 0 ; 标记当前字符是否为数字

.code
start:
    ; 输出提示信息
    invoke StdOut, addr prompt

    ; 读取输入字符串
    invoke gets, addr buffer

    ; 遍历字符串
    mov esi, offset buffer
    mov ecx, 0
    mov word_count, 0
    mov number_count, 0
    mov is_word, 1

loop_start:
    mov al, byte ptr [esi]
    cmp al, 0 ; 判断是否到字符串结尾
    je loop_end

    ; 判断当前字符类型
    cmp al, '0'
    jl is_word_char
    cmp al, '9'
    jle is_number_char
is_word_char:
    cmp is_word, 0
    je continue_loop
    mov is_word, 0
    inc word_count
    jmp continue_loop
is_number_char:
    cmp is_word, 1
    je continue_loop
    mov is_word, 1
    inc number_count
    jmp continue_loop

continue_loop:
    inc esi
    jmp loop_start

loop_end:
    ; 输出结果
    invoke StdOut, addr buffer
    invoke crt_printf, addr buffer, word_count
    invoke StdOut, addr buffer
    invoke crt_printf, addr buffer, number_count

    invoke ExitProcess, 0
end start

这个程序会先输出一个提示信息,要求用户输入一个字符串。然后它会遍历输入的字符串,并根据空格分隔出单词和数字,分别统计它们的个数。最后输出结果。

需要注意的是,这个程序只能处理长度不超过 256 个字符的输入字符串,如果需要处理更长的字符串,需要修改代码以支持动态内存分配。

汇编语言实现字符串单词和数字统计

原文地址: https://www.cveoy.top/t/topic/ol0E 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录