emu编程统计字符串中的数字、字母、其它字符的个数,统计结果分别存放在 num, char, other 单元中。
时间: 2024-02-18 18:05:14 浏览: 18
你可以参考下面的 C 语言代码实现:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
char str[100];
int i, num = 0, char_cnt = 0, other = 0;
printf("请输入字符串:");
fgets(str, sizeof(str), stdin);
for (i = 0; str[i] != '\0'; i++) {
if (isdigit(str[i])) {
num++;
} else if (isalpha(str[i])) {
char_cnt++;
} else {
other++;
}
}
printf("数字个数:%d\n", num);
printf("字母个数:%d\n", char_cnt);
printf("其它字符个数:%d\n", other);
return 0;
}
```
这个程序使用了 `isdigit()` 和 `isalpha()` 函数来判断字符是否为数字和字母,如果不是就认为是其它字符。程序首先从标准输入读入一个字符串,然后遍历字符串中的每个字符,统计数字、字母和其它字符的个数,并将结果分别存放在 `num`、`char_cnt` 和 `other` 变量中,最后输出统计结果。
相关问题
用emu8086设计程序,假设在以 BUF 为首地址的存储单元中存放着一串字符,找出其中 ASCII 码值最大的字符,并存入 MAX 单元中
好的,以下是程序的汇编代码:
```
; 找出字符串中ASCII码值最大的字符
org 100h
section .data
MAX db 0 ; 最大ASCII码值的字符
BUF db "Hello World!",0 ; 字符串,需要查找最大ASCII码值的字符
section .text
start:
mov si, offset BUF ; 将字符串起始地址存入si寄存器
mov al, [si] ; 将第一个字符的ASCII码值存入al寄存器
mov [MAX], al ; 将第一个字符的ASCII码值存入MAX单元
loop_start:
inc si ; 指向下一个字符
mov al, [si] ; 将当前字符的ASCII码值存入al寄存器
cmp al, [MAX] ; 比较当前字符的ASCII码值与MAX单元中的值
jle continue_loop ; 如果当前字符的ASCII码值小于或等于MAX单元中的值,继续循环
mov [MAX], al ; 否则将当前字符的ASCII码值存入MAX单元
continue_loop:
cmp byte ptr [si], 0 ; 检查是否到达字符串结尾
jne loop_start ; 如果没到结尾,继续循环
mov ah, 4Ch ; 退出程序
int 21h
```
这段程序从字符串的第一个字符开始,依次比较每个字符的ASCII码值与MAX单元中存储的值,如果当前字符的ASCII码值大于MAX单元中的值,则将当前字符的ASCII码值存入MAX单元。最终,MAX单元中存储的就是字符串中ASCII码值最大的字符。你可以将程序复制粘贴到emu8086中进行编译和运行,然后查看MAX单元中的值是否为ASCII码值最大的字符。希望能够帮到你!
使用emu8086编写子程序,删除字符串中从第n个字符开始的m个字符。
以下是使用emu8086汇编语言编写的删除字符串子程序:
```assembly
; 删除字符串中从第n个字符开始的m个字符
; 输入:si指向字符串首地址,n为开始位置,m为删除的字符数
; 输出:字符串中删除了对应的字符
delete_str:
push bp
mov bp, sp
push si
push di
mov si, [bp+4] ; si指向字符串首地址
mov di, si ; di保存字符串首地址
mov cx, [bp+6] ; cx保存n的值,即开始位置
sub cx, 1 ; 将n转化为偏移量
add si, cx ; si指向第n个字符
mov di, si ; di指向第n个字符,准备删除
mov cx, [bp+8] ; cx保存m的值,即删除的字符数
delete_loop:
mov al, [si+cx] ; 将si+cx位置上的字符保存到al中
mov [di], al ; 将al中的字符复制到di位置上
inc di ; di指向下一个字符
cmp al, '$' ; 判断是否到字符串结尾
je delete_end ; 到结尾了就结束循环
jmp delete_loop
delete_end:
mov [di], '$' ; 在删除后的字符串末尾加上结束标志
pop di
pop si
pop bp
ret
```
以上代码实现了删除字符串中从第n个字符开始的m个字符的功能。在使用时,需要将字符串首地址、开始位置n、删除的字符数m依次压入栈中,然后调用delete_str子程序即可完成删除操作。