编写完整程序,比较两个字符 STRING1 和 STRNG2 所含字符是否完全相同,若相同则显示“NATCH”,若不同则显示”NO MATCH”
时间: 2024-03-09 20:48:15 浏览: 65
以下是一个实现上述要求的 C 语言程序:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char string1[100], string2[100];
printf("请输入两个字符串:\n");
scanf("%s%s", string1, string2);
if (strcmp(string1, string2) == 0) {
printf("MATCH\n");
} else {
printf("NO MATCH\n");
}
return 0;
}
```
程序首先从键盘输入两个字符串,使用 scanf 函数以 %s 格式读入,并分别存储在 string1 和 string2 数组中。然后使用 strcmp 函数比较两个字符串是否相同,如果相同则输出 MATCH,否则输出 NO MATCH。最后程序返回 0,表示运行成功结束。需要注意的是,strcmp 函数比较的是字符串的内容,而不是字符串的地址,因此可以正确判断两个字符串是否相等。
相关问题
编写完整程序,比较两个字符STRING1和STRNG2所含字符是否完全相同,若相同则显示“NATCH”,若不同则显示”NO MATCH”.
下面是一个比较两个字符串是否相同的完整汇编语言程序:
```
section .data
string1 db 'Hello', 0
string2 db 'World', 0
match_msg db 'MATCH', 0
no_match_msg db 'NO MATCH', 0
section .text
global _start
_start:
mov esi, string1 ; 将字符串1的地址存储在esi中
mov edi, string2 ; 将字符串2的地址存储在edi中
compare_loop:
mov al, [esi] ; 将esi指针指向的字符存储在al中
mov bl, [edi] ; 将edi指针指向的字符存储在bl中
cmp al, bl ; 比较两个字符
jne strings_not_equal ; 如果不相等,跳转到strings_not_equal标签
inc esi ; 将esi指针向后移动一位
inc edi ; 将edi指针向后移动一位
cmp al, 0 ; 检查字符串是否已经比较完毕
jne compare_loop ; 如果字符串没有比较完毕,继续比较
strings_equal:
mov eax, 4 ; 将4存储在eax中,表示调用系统中断,用于显示字符串
mov ebx, 1 ; 将1存储在ebx中,表示标准输出
mov ecx, match_msg ; 将match_msg字符串的地址存储在ecx中
mov edx, 5 ; 将5存储在edx中,表示match_msg字符串的长度
int 0x80 ; 调用系统中断,显示MATCH字符串
jmp end_program ; 跳转到end_program标签
strings_not_equal:
mov eax, 4 ; 将4存储在eax中,表示调用系统中断,用于显示字符串
mov ebx, 1 ; 将1存储在ebx中,表示标准输出
mov ecx, no_match_msg ; 将no_match_msg字符串的地址存储在ecx中
mov edx, 7 ; 将7存储在edx中,表示no_match_msg字符串的长度
int 0x80 ; 调用系统中断,显示NO MATCH字符串
end_program:
mov eax, 1 ; 将1存储在eax中,表示程序已经执行完毕
xor ebx, ebx ; 清空ebx寄存器
int 0x80 ; 调用系统中断,退出程序
```
该程序使用了两个字符串,分别存储在`string1`和`string2`变量中。程序首先将`esi`和`edi`寄存器分别指向两个字符串的起始位置。然后,程序使用`mov`指令将`esi`指针指向的字符存储在`al`寄存器中,将`edi`指针指向的字符存储在`bl`寄存器中,并使用`cmp`指令比较两个字符。如果两个字符不相等,程序会跳转到`strings_not_equal`标签,否则程序将继续比较下一个字符。
如果所有字符都比较完毕并且相等,程序将跳转到`strings_equal`标签,显示MATCH字符串。否则将跳转到`strings_not_equal`标签,显示NO MATCH字符串。最后,程序使用`int 0x80`调用系统中断退出程序。
注意:在编写汇编语言程序时,要保证每个字符串以0结尾。这可以通过在字符串末尾添加一个0值字节来实现。
微机原理: 编写完整程序,比较两个字符 STRING1 和 STRNG2 所含字符是否完全相同,若相同则显示“NATCH”,若不同则显示”NO MATCH”
以下是一个实现上述要求的汇编语言程序,针对 8086 CPU:
```asm
.model small
.stack 100h
.data
string1 db 100 dup(0), '$'
string2 db 100 dup(0), '$'
match db 'MATCH$'
no_match db 'NO MATCH$'
.code
mov ax, @data
mov ds, ax
; 读入字符串1
lea dx, string1
mov ah, 0Ah
int 21h
; 读入字符串2
lea dx, string2
mov ah, 0Ah
int 21h
; 比较两个字符串
lea si, string1
lea di, string2
cmpsb
jne mismatch
cmpsb
jne mismatch
mov dx, offset match
jmp print
mismatch:
mov dx, offset no_match
print:
; 输出结果
mov ah, 09h
int 21h
mov ah, 4Ch
int 21h
end
```
程序首先定义了两个字符串 string1 和 string2,以及匹配和不匹配的字符串 match 和 no_match。然后使用 21h 中断读入两个字符串,存储在 string1 和 string2 中。接着使用 cmpsb 指令比较两个字符串,如果不匹配则跳转到 mismatch 标签,输出 no_match 字符串,否则继续比较,直到两个字符串完全匹配。如果两个字符串完全匹配,则跳转到 print 标签,输出 match 字符串。
最后程序使用 21h 中断输出字符串,然后使用 4Ch 中断退出程序。
阅读全文