输入两个字符串,输出两个字符串的长度,判断两个字符串是否相同,并

作者&投稿:禾琪 (若有异议请与网页底部的电邮联系)
汇编语言:两个字符串是否相等的比较。由用户输入两个字符串并判断他们是否相等,两个相等则输出Y,否则输N~

你的程序中有几处错误:
1. ASSUME伪操作中,漏掉了CS,导致汇编时对转移指令报错。
2. 没有显示Y的指令,所以只显示N。
3. 比较字串内容时没有对计数器进行设置。
4. 比较字串时,起点向前错位了一个字节。
5. 一些其它小的缺陷,比如对段寄存器的赋值应当放在代码前面部分,有一些重复代码和无用代码等。这些不影响本程序的运行结果,所以我未作处理。

修改后的代码如下(修改过的或增加的指令,我在行末加 ;************ 注明):

DATAS SEGMENT
BUF DB 10H,?,10 DUP(?)
BUF1 DB 10H,?,10 DUP(?)
DATAS ENDS
CODES SEGMENT
ASSUME cs:codes, ES:DATAS,DS:DATAS ;************原程序漏掉了CS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,BUF
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AX,DATAS
MOV DS,AX
LEA DX,BUF1
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AX,DATAS
MOV ES,AX
LEA SI,BUF
LEA DI,BUF1
;比较字符串长度是否相等
MOV AL,ES:[SI+1]
MOV BL,DS:[DI+1]
CMP AL,BL
JNZ NO
;比较字符串的内容是否相等
mov cl, [si+1] ;************设置CX计数
mov ch,0 ;************
inc si ;************调指针指向后面实际输入的字符
inc di ;************

CM:
INC SI
INC DI
MOV AL,ES:[SI]
MOV BL,DS:[DI]
CMP AL,BL
JNZ NO
LOOP CM

mov dl, 'Y' ;************显示‘Y’
mov ah, 2 ;************
int 21h ;************
jmp exit ;************跳过显示‘N’的代码

NO:
MOV DL,'N'
MOV AH,02H
INT 21H

MOV SI,AX ;************这一条指令多余,可删除
exit: ;************
MOV AH,4CH
INT 21H
CODES ENDS
END START

C语言提供了几个标准库函数,可以比较两个字符串是否相同。以下是用strcmp()函数比较字符串的一个例子:

#include
#include
void main (void);
void main(void)
{
char* str_1 = "abc" ; char * str_2 = "abc" ; char* str_3 = "ABC" ;
if (strcmp(str_1, str_2) == 0)
printf("str_1 is equal to str_2.
");
else
printf("str_1 is not equal to str_2.
");
if (strcmp(str_1, str_3) == 0)
printf("str_1 is equal to str_3.
");
else
printf("str_1 is not equalto str_3.
");
}

上例的打印输出如下所示:
str_1 is equal to str_2.
str_1 is not equal to str_3.

strcmp()函数有两个参数,即要比较的两个字符串。strcmp()函数对两个字符串进行大小写敏感的(case-sensitiVe)和字典式的(lexicographic)比较,并返回下列值之一:
----------------------------------------------------
返 回 值 意 义
----------------------------------------------------
<0 第一个字符串小于第二个字符串
0 两个字符串相等 ·
>0 第一个字符串大于第二个字符串
----------------------------------------------------
在上例中,当比较str_1(即“abc”)和str_2(即“abc”)时,strcmp()函数的返回值为0。然而,当比较str_1(即"abc")和str_3(即"ABC")时,strcmp()函数返回一个大于0的值,因为按ASCII顺序字符串“ABC”小于“abc”。
strcmp()函数有许多变体,它们的基本功能是相同的,都是比较两个字符串,但其它地方稍有差别。下表列出了C语言提供的与strcmp()函数类似的一些函数:
-----------------------------------------------------------------
函 数 名 作 用
-----------------------------------------------------------------
strcmp() 对两个字符串进行大小写敏感的比较
strcmpi() 对两个字符串进行大小写不敏感的比较
stricmp() 同strcmpi()
strncmp() 对两个字符串的一部分进行大小写敏感的比较
strnicmp() 对两个字符串的一部分进行大小写不敏感的比较
-----------------------------------------------------------------
在前面的例子中,如果用strcmpi()函数代替strcmp()函数,则程序将认为字符串“ABC”等于“abc”。

主要考察字符串函数的使用,其中用到三个主要函数:

1、求字符串长度:int strlen(char *s);

    头文件:string.h

    说明:返回s的长度,不包括结束符NULL。

2、判断字符串大小:int strcmp(const char *s1,const char *s2);

    头文件:string.h

    说明:当s1<s2时,返回为负数;当s1==s2时,返回值= 0;当s1>s2时,返回正数。

3、字符串拼接:char *strcpy(char* dest, const char *src);

     头文件:string.h

    说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。


参考代码:

#include<string.h>
#include<stdio.h>
int main()
{
   char a[140],b[140];
   scanf("%s%s",&a,&b);
   printf("%s:%d
%s:&d
",a,strlen(a),b,strlen(b));//输出a和b的长度
   if(strcmp(a,b)==0)//判断是否相等
       printf("a==b
");
   else
       printf("a!=b
");
   printf("%s
",strcpy(a,b));//字符串拼接
    return 0;
 }



输入两个字符串,将这两个字符串连接后输出
include <stdio.h>int main(void){ char a[100],b[50],*pa,*pb; scanf("%50s%50s",a,b); pa=a,pb=b; while(*pa) pa++; while(*pa++=*pb++); printf("\\n%s\\n",a); return 0;}

输入两个字符串以回车键结束,将这两个字符串连接起来,并输出新字符串以...
include <stdio.h> int main(){char s1[200],s2[200],s3[400],*p1,*p2;gets(s1);gets(s2);for(p1=s1,p2=s3;*p2++=*p1++;);for(p1=s2,p2--;*p2++=*p1++;);puts(s3);printf("%d\\n",p2-s3);return 0;}

输入两个字符串 输出期中长度值较大的字符串(不使用strlen()函数)_百 ...
str2); return 0;}int setStr(char *str){ int len=0; char c; printf("输入一个字符串:\\n"); while(1) { c=getchar(); if(c=='\\n') break; str[len]=c; len++; } str[

输入两个字符串(长度<40),连接后输出。(不得使用系统函数strcat())_百 ...
include<stdio.h> main(){char str1[40],str2[40];int i=0,j=0;printf("input string1:");gets(str1);printf("input string2:");gets(str2);while(str1[i]!='\\0') i++;while(str2[j]!='\\0') str1[i++]=str2[j++];str1[i]='\\0';printf("The new string is:...

...将两个字符串交叉 得到第三个字符串str3,输出.
include <stdio.h>#include <string.h>#include <stdlib.h>int main(void) {char str11[] = "1234567";char str21[] = "fwefjsodfijso";char *str3 = NULL;char *str1 = str11, *str2 = str21;int len = strlen(str1) + strlen(str2) + 1;str3 = (char *)malloc(len);c...

从键盘上输入两个字符串,若不等,将短字符串接在长字符串后面,输出新...
gets(str2); \/* 输入字符串2 *\/ len1 = strlen(str1); \/* 获取字符串1的长度 *\/ len2 = strlen(str2); \/* 获取字符串2的长度 *\/ if(len1 < len2){ strcat(str2, str1); \/* 将短的字符串1接在较长的字符串2的后面 *\/ printf("new string : %s\\n", str2);} else {...

编写程序:将两个字符串连接后输出。(提示信息:如两个字符串为“country...
include<stdio.h> char *strcat1(char *s,char *t);int main(void){ char s1[80],s2[80];printf("Please input two strings:\\n");gets(s1);gets(s2);printf("%s\\n",strcat1(s1,s2));return 0;} char *strcat1(char *s,char *t){ int i,j;for(i=0;s[i]!='\\0';i++)...

C语言编写一个程序输入两个字符串1和字符串2(两个字符串长度不超过20...
strDest++; \/\/将指向'\\0'的下一个位置。\/所以要在循环体内++;因为要是*strDest最后指 } \/\/向该字符串的结束标志’\\0’。while(*strDest++ = *strSrc++){ p++等价于*(p++)。至于为什么会等价呢?根据c语言的优先级。*与++的优先级同处在第二级别上。他们的优先级是一样的,又因为处在...

接收用户输入的两个字符串,将两个字符串连接后输出
刚回答一个 include<iostream.h> void main(){ char* strcat(char *,char *);char str1[100];char str2[100];for(int i=0;i<10;i++){ str1[i]='\\0';str2[i]='\\0';} cin>>str1>>str2;cout<<strcat(str1,str2);} char* strcat(char *p1,char *p2){ char *head;head...

...编程实现,使用字符串函数puts(),输入两个字符串,再使用gets()函数...
puts是输出函数,gets是输入函数,用strcat可以连起来,在string中

崇州市13392214731: 输入两个字符串,输出两个字符串的长度,判断两个字符串是否相同,并 -
晏怖赛克: 主要考察字符串函数的使用,其中用到三个主要函数:1、求字符串长度:int strlen(char *s); 头文件:string.h 说明:返回s的长度,不包括结束符NULL.2、判断字符串大小:int strcmp(const char *s1,const char *s2); 头文件:string.h 说明:...

崇州市13392214731: C语言中 输入两个字符串,链接到一起并输出长度 使用stract -
晏怖赛克: char str1[20] = "Hello "; char str2[20] = "World!"; strcat(str1,str2); printf("%s\n",str1);//结果打印Hello World! //连接两个字符串str1 连接str2 ,把结果放到第一个参数str1中

崇州市13392214731: 给定程序中,程序的功能是:输入2个字符串,输出2个字符串中较短的长度. -
晏怖赛克: 1:strlen(a1);2:strlen(a2)3:l1

崇州市13392214731: 输入两个字符串,比较两个字符串的大小如果相等,则输出字符串的长度如何不相等,则输出不相等的字符个数 -
晏怖赛克: 首先字符串比较是从两个字符串的起始位置开始比较,依次向后比较,如遇到字符不等,计数器加1,继续向后比较直到比较字符串末尾,如字符一直相等,则输出字符串的length()函数值,便可,望采纳!!!

崇州市13392214731: C++输入两个字符串,比较其长度,输出长的...急.谢谢啦 -
晏怖赛克: #include<iostream>#include<string> using namespace std; int main() { char a[100],b[100]; cout<<"请输入第一个字符串:"; cin>>a; cout<<"请输入第二个字符串:"; cin>>b; cout<<"最长的字符串是:"; if(strlen(a)>strlen(b)) cout<<a<<endl; else cout<<b<<endl; return 0; }

崇州市13392214731: 输入两个字符串,输出其中长度值大的字符串(要求"不"使用strlen()函数) -
晏怖赛克: 写一个函数,求出长度,然后两个字符串带入函数中,输出它们的长度,比较后输出最大的.

崇州市13392214731: C语言 字符串大小 编写个简单的程序,能输入两个字符串后,判断他们的长度,输出长的那个,不要用 -
晏怖赛克: 看看这个行不?#include int main() { char c1[100],c2[100]; int n1,n2,i; printf("请输入第一个字符串,以回车结束:"); scanf("%s",&c1); printf("请输入第二个字符串,以回车结束:"); scanf("%s",&c2); for(i=0;;i++) { if(c1[i...

崇州市13392214731: c语言中输入两个字符后怎样输出长度 -
晏怖赛克: #include<string.h>#include<stdio.h>/*c语言中输入两个字符后怎样输出长度*/ int main(){ char temp[10] = ""; printf("please input the string\n"); gets_s(temp); printf("The input string length is %d\n", strlen(temp)); return 0; }

崇州市13392214731: 国家计算机二级c语言上机编程,我抽到是比较两个字符串的长短,请输出长的字符串,如果相等输出第一个. -
晏怖赛克: 如果你的题目举例是 beijing和shanghai,这两个字符的长度分别是7和8,所以你运行出来shanghai就是对的,没有问题,可以放心,只要其它在语法方面不出问题,应该就是满分了,恭喜!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网