汇编语言编写,从键盘输入一个字符串,删除其中的空格,删除前和删除后的字符串都显示

作者&投稿:闽肃 (若有异议请与网页底部的电邮联系)
汇编程序,请任意输入一个字符串,将其中的空格全部删除,并将结果显示在屏幕上。~

;感觉你原来的程序有点混乱,修改如下:

DATA SEGMENT
BUF DB 32
DB ?
DB 32 DUP(?)
COUNT DW ?
buf0 db 0dh,0ah ;定义一个回车换行
buf1 DB 32 DUP('$') ;去掉空格后的字符串存放位置


DATA ENDS

STACK SEGMENT
DB 100 DUP(0)
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,0AH
LEA DX,BUF
INT 21H


xor cx,cx
mov cl,buf+1
mov bx,offset buf1 ;将BX指向去掉空格后的字符串存放起始位置


LEA SI,BUF
add si,2 ;将SI指向已输入字符串的开始位置
loop1:
mov al,[si]
cmp al,' '
jz be_k ;是空格则不存
mov [bx],al ;否则存入
inc bx
be_k:
inc si


loop loop1 ;循环
lea dx,buf0 ;换一行显示结果
mov ah,9
int 21h


EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START

给你的代码相对优化了一下
也换了个思路,你的思路有一个问题

比如说输入是"a b c d",经过你的代码处理,
第一次会变成"a"
第二次会变成"ab"
第三次会变成"abb"
因为你把后面已经挪过上来的字符,又加进来了,所以导致错误结果
所以如果要用你的思路,得把被挪上来的那个字符,挪完之后设置成空格
int main(void){ char str[100],str1[100]; //多加了一个缓冲区 int to=0; printf("enter a string: "); fgets(str,sizeof(str),stdin); //这里你对str结尾加了个'\0',没必要,fgets自动加了 for(int index=0;index<strlen(str);index++) { if(isalnum(str[index])) str1[to++]=str[index]; } str1[to]='\0'; //这里就必须要加了 printf("%s",str1); return 0;}
不是很明白你所谓的用指针意义何在,是学习目的?
int main(void){ char str[100],str1[100]; char *pstr=str,*pstr1=str1; int index=0; int to=0; printf("enter a string: "); fgets(str,sizeof(str),stdin); *(pstr+strlen(str)-1)='\0'; for(index=0;index<strlen(str);index++) { if(isalnum(*(pstr+index))) *(pstr1+to++)=*(pstr+index); } *(pstr1+to)='\0'; printf("%s",pstr1); return 0;}

;消空
code  segment
      assume cs:code
      org 100h
start:
      jmp bbb
str1  db 254 dup(' ')
str2  db 254 dup(' ')
num   db ?
msg1  db 10,13,'please input string:','$'
lfcr  db 10,13,'$'

bbb:
      push cs
      pop ds
      lea dx,msg1
      mov ah,9
      int 21h

      MOV cx,0
      lea di,str1
again1:
      mov ah,1
      int 21h
      cmp al,13
      je line1
      mov byte ptr[di],al
      inc cx
      inc di
      jmp again1
line1:
;      mov byte ptr[num],cl
      mov byte ptr[di+1],'$'
      
      lea dx,lfcr
      mov ah,9
      int 21h
      lea dx,str1
      mov ah,9
      int 21h
      
      lea si,str1
      lea di,str2
again2:
      mov al,byte ptr[si]
      cmp al,' '
      je line2
      mov byte ptr[di],al
      inc di
line2:
      inc si
      loop again2
      mov byte ptr[di+1],'$'

      lea dx,lfcr
      mov ah,9
      int 21h
      lea dx,str2
      mov ah,9
      int 21h

      mov ah,4ch
      int 21h
code  ends
      end start



怎么用C语言编写一个程序,它从键盘上输入5个整数,然后输出它们的积...
include<stdio.h> void main(){ int a,b,c,d,e,s;printf("请输入五个数以#结束:\\n");scanf("%d",&a);scanf("%d",&b);scanf("%d",&c);scanf("%d",&d);scanf("%d",&e);s=a*b*c*d*e;printf("五个数乘积为%d",s);} ...

用汇编语言编写:从键盘输入一个十进制数(100以内),将其转变为二进制数...
DSEG SEGMENT INPUT DB 'INPUT A NUMBER:','$'OUTPUT DB 32,'RESULT IS:','$'NUMBER DB 3 DB ?db 3 DUP(0)DSEG ENDS CSEG SEGMENT assume cs:CSEG, ds:DSEG MAIN PROC FAR mov ax, dseg mov ds, ax lea dx,INPUT mov ah,9 int 21h lea dx,NUMBER mov ah,0ah int 21h lea ...

C语言编程,从键盘输入四个整数,按照数值从小到大顺序输出
源代码如下:include<stdio.h> int main( ){ int num[4];for(int i = 0 ; i < 4 ; i++){ scanf("%d", num+i);} for(int i = 0 ; i < 4 ; i++){ int k = i;for(int j = i+1 ; j < 4 ; j++){ if(num[k] > num[j]){ k = j;} } if(k != i){...

用java语言编写从键盘任意输入字符或是字母输出转换ASII码值
import java.util.Scanner;public class Test { public static void main(String[] args) { Scanner input=new Scanner(System.in);String str="";String temp;System.out.println("请输入字符,然后回车!");temp=input.nextLine();str=temp.trim();if(str.length()!=1) { System.out.print...

c语言实现从键盘上输入10个数,并输出。
用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序排序输出。代码如下:include<stdio.h> int main(){ int i,j,a[10],t;printf("输入数");for (i = 0; i < 10; i++)scanf("%d",&a[i]);for (i = 0; i < 10; i++){ for (j = i + 1; j < 10;j...

用C语言编写程序从键盘输入一个正整数数n,输出n!
include <stdio.h>int Func(int n){if(n < 2)return 1;else return n*Func(n-1);} void main(){int n =0,m=0;printf("请输入一个正整数:")scanf("%d",&n);m=Func(n);printf("%d!=%d\\n",n,m);} 在以上程序代码中,Func()为递归函数,主函数main()中接收键盘输入整数...

C语言:编写一个程序,从键盘输入10个学生成绩,求平均成绩。
\/*C语言:编写一个程序,从键盘输入10个学生成绩,求平均成绩 *\/#include <stdio.h>#define N 10int main() { float arr[N]={0.0},s=0.0; int i; for(i=0;i!=N;++i){\/\/输入 scanf("%f",&arr[i]); s+=arr[i]; } printf("%0.2f\\n", s\/N);\/\/...

C语言编程题:从键盘输入一个小写字母,在屏幕上显示其对应的大写字母_百 ...
【C语言输入小写字母,输出显示为大写字母主要用到字符】例子如下:直接编译,程序输出结果中输入任意小写字母,按回车,得到结果如下图所示:

C语言编程 编写程序,从键盘输入一个字符串放在字符数组a中,用选择法...
include<stdio.h>int main(){int i,j,n; char s[200],c; gets(s); for(n=0;s[n];n++); for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) if(s[j]>s[j+1]) {c=s[j];s[j]=s[j+1];s[j+1]=c;} puts(s); return 0;} ...

C语言编程题 4.编程实现:由用户从键盘输入一串字符(以回车键结束),统 ...
include<stdio.h>#include<stdlib.h>int main(){ char a[128]; gets(a); int i=0; int c1,c2,c3,c4; c1=c2=c3=c4=0; while(a[i++]) { if(a[i]>='A'&& a[i]<='Z') c1++; else if(a[i]>='a'&& a[i]<='z') c2++; else if...

双清区19291452458: 汇编语言,从键盘输入一字符串 -
厨人静宏强: ;经运行,符合题目要求 code segment assume cs:code,ds:code org 100h start: push cs pop ds Q0:lea dx,Buffer mov ah,9 ;显示提示 int 21h mov si,200h ;硬编码缓冲区首址 mov byte ptr [si],0ffh ;置输入缓冲区大小为255个字符 mov dx,si ;定...

双清区19291452458: [汇编语言]由键盘输入任意字符串 然后显示出来 -
厨人静宏强: data segment keyboard db 256,?,256 dup (?) data ends code segment assume cs:code,ds:data main proc far mov ax,data mov ds,ax lea dx,keyboard mov ah,0ah;输入字符串 int 21h lea di,keyboard mov cl,[di+1];取出实际输入字符的个数 mov ...

双清区19291452458: 编写汇编语言程序段:从键盘输入一个字符串“please input a number”存入BUFF -
厨人静宏强: code segmentassume cs:codeorg 100h start: jmp bbb data db 255 n db ? buff db 255 dup(?) bbb: push cspop dspush cspop eslea dx, datamov ah,10int 21h ; 从键盘输入字符串,字符串的字符个数在n中,串的开始地址为buff首地址...........mov ah,4chint 21h code endsend start

双清区19291452458: 从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现 -
厨人静宏强: 从键盘输入一个字符串在下一行逆序输出用汇编语言可用如下方法实现: ;汇编语言输入一串字符串,可以调用DOS功能中断INT 21H的06H功能. ;程序功能:输入一串字符,以回车符结束,输入字符串最大长度200字符; ; 输入结束在下一...

双清区19291452458: 汇编怎样编写从键盘接收字符串的程序 -
厨人静宏强: DATAS SEGMENT STR DB"please input a string:$" BUF DB 20 ;这里的20为指定存放字符的个数(理论上的) DB ? ;这的?可变,实际存放字符的个数(系统自动计算) DB 20 DUP (?) ;这里的20是你在数据段开辟的空间 CRLF ...

双清区19291452458: 从键盘接受一个字符串 汇编语言 -
厨人静宏强: 调试通过! DATAS SEGMENTmeg1 db 'Input:$'meg2 db 0dh,0ah,'$'meg3 db 20 dup(0) DATAS ENDS STACKS SEGMENT;此处输入堆栈段代码 STACKS ENDS CODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS ...

双清区19291452458: 从键盘读入一字符串(长度小于32),并将其输出显示. -
厨人静宏强: 同学我帮你完成了你的程序,编译通过,可 1、从键盘输入一个字符串(串长度小于100个字符),统计其串的长度后输出该串,需要说明的是最后输出的字符串长度是十六进制的,不过这个关系不大.呵呵 ;加点分哈~~~~~~~~~~~~~~~~~~~~...

双清区19291452458: 用8086汇编语言编写一个输入字符串的程序 -
厨人静宏强: 代码如下:DSEG SEGMENT SPACES DB 20H, 20H, 20H, 20H, 24H LINE DB 0DH, 0AH, 24H DSEG ENDS SSEG SEGMENT PARA STACK e68a84e8a2ad62616964757a686964616f31333365656563DW 256 DUP(?) SSEG ENDS CSEG ...

双清区19291452458: 汇编语言:从键盘输入一个字符串,再从键盘输入一个字符,如果在原字符串中有这个字符就把它移到最后, -
厨人静宏强: data segment parastr1 db 'one', '$'str2 db 'two', '$'str3 db 'three', '$'str4 db 'four', '$'str5 db 'five', '$'tab dw str1,str2,str3,str4,str5 data ends ssg segment stack dw 256 dup(?) ssg ends code segment para ...

双清区19291452458: 用汇编语言实现从键盘输入一个串字符到输入缓冲区,然后将输入的字符串显现到屏幕上,再以相反地顺序显示! -
厨人静宏强: 你只显示了相反的顺序,你又没有显示源字符串,

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