段内子程序将string中的小写字母都转化成大写字母并将string内容显示输出
时间: 2024-03-01 13:50:23 浏览: 76
好的,以下是将字符串中的小写字母转换成大写字母并输出的C++代码:
```c++
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello, World!";
for (int i = 0; i < str.length(); i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = str[i] - 'a' + 'A';
}
}
cout << str << endl;
return 0;
}
```
这个程序会将字符串中的小写字母转换成大写字母,并输出转换后的字符串。
相关问题
用汇编语言用段内子程序将STRING中的小写字母转化成大写字母,并将STRING内容显示输出
好的,这是一个比较基础的汇编语言问题,我来给您讲解一下。
首先,我们需要定义一个字符串变量,假设它的名字是STRING,存储在数据段中。然后,我们需要编写一个段内子程序,将小写字母转化成大写字母。最后,在主程序中,调用这个子程序,并将转换后的STRING内容输出。
以下是一个简单的实现代码,您可以参考一下:
```
; 数据段
.386
.MODEL FLAT, STDCALL
.DATA
STRING DB 'hello, world!', 0
.CODE
.SUBROUTINE ConvertToUpper
push ebp
mov ebp, esp
push ebx
push ecx
push edx
mov ebx, [ebp + 8] ; 参数1:字符串的地址
mov ecx, 0 ; 初始化计数器
LoopStart:
mov al, [ebx + ecx] ; 读取字符
cmp al, 'a' ; 判断是否为小写字母
jb NotLower
cmp al, 'z'
ja NotLower
sub al, 'a' - 'A' ; 转化为大写字母
mov [ebx + ecx], al ; 将结果存回字符串中
NotLower:
inc ecx ; 计数器加1
cmp byte ptr [ebx + ecx], 0 ; 判断是否到达字符串结尾
jne LoopStart
pop edx
pop ecx
pop ebx
mov esp, ebp
pop ebp
ret
ENDSUBROUTINE
; 主程序
START:
mov eax, OFFSET STRING ; 将字符串地址存入eax寄存器
call ConvertToUpper ; 调用子程序
; 输出转换后的字符串
mov edx, OFFSET STRING
mov ecx, LENGTHOF STRING
mov ebx, 1
mov eax, 4
int 0x80
; 退出程序
mov eax, 1
xor ebx, ebx
int 0x80
END START
```
在这个代码中,我们定义了一个名为ConvertToUpper的子程序,它接受一个字符串的地址作为参数,将其中的小写字母转化为大写字母,并将结果存回字符串中。在主程序中,我们首先将字符串的地址存入eax寄存器,然后调用ConvertToUpper子程序。最后,我们使用Linux系统调用,将转换后的字符串输出,并退出程序。
希望这个例子能够帮助您理解汇编语言的基础知识。
汇编编写完整上机程序,实现如下功能: (1)段内子程序:实现从键盘输入10个字母并将其ASCII码存入到字节数组STRING中。(7分) (2)段间子程序:将STRING中的小写字母都转化成大写字母,并将STRING内容显示输出。(8分)
下面是一个实现题目要求的完整上机程序:
```
TITLE Convert String to Upper Case
.MODEL SMALL
.STACK 100H
.DATA
STRING DB 10 DUP (?) ; 存放输入的字符 ASCII 码
MSG1 DB 'Please enter 10 letters:', 0DH, 0AH, '$'
MSG2 DB 'The converted string is:', 0DH, 0AH, '$'
.CODE
MAIN PROC
MOV AX, @DATA ; 初始化数据段寄存器
MOV DS, AX
MOV AH, 09H ; 显示提示信息
LEA DX, MSG1
INT 21H
CALL READ_STRING ; 调用输入字符串的子程序
CALL CONVERT_STRING ; 调用转换字符串的子程序
MOV AH, 09H ; 显示转换后的字符串
LEA DX, MSG2
INT 21H
MOV AH, 09H
LEA DX, STRING
INT 21H
MOV AH, 4CH ; 退出程序
INT 21H
MAIN ENDP
READ_STRING PROC
MOV CX, 10 ; 循环读取10个字符
LEA SI, STRING ; 将 STRING 的偏移地址存放到 SI 寄存器中
READ_LOOP:
MOV AH, 01H ; 从键盘读取一个字符
INT 21H
MOV [SI], AL ; 将读取的字符存放到字符串中
INC SI ; 将指针指向下一个位置
LOOP READ_LOOP ; 继续读取下一个字符
RET
READ_STRING ENDP
CONVERT_STRING PROC
LEA SI, STRING ; 将 STRING 的偏移地址存放到 SI 寄存器中
MOV CX, 10 ; 循环处理10个字符
CONVERT_LOOP:
MOV AL, [SI] ; 将当前字符的 ASCII 码移动到 AL 寄存器中
CMP AL, 61H ; 判断是否为小写字母
JB SKIP ; 如果不是小写字母,则跳过
CMP AL, 7AH ; 判断是否为小写字母
JA SKIP ; 如果不是小写字母,则跳过
SUB AL, 20H ; 将小写字母转换为大写字母
MOV [SI], AL ; 将转换后的字符存放回字符串中
SKIP:
INC SI ; 将指针指向下一个字符
LOOP CONVERT_LOOP ; 继续处理下一个字符
RET
CONVERT_STRING ENDP
END MAIN
```
上面的程序实现了从键盘输入10个字符,并将其 ASCII 码存放到 STRING 数组中的 READ_STRING 子程序,以及将字符串中的小写字母转换为大写字母,并将转换后的字符串显示输出的 CONVERT_STRING 子程序。在主程序中,先调用 READ_STRING 子程序获取用户输入的字符串,然后调用 CONVERT_STRING 子程序将小写字母转换为大写字母,并将转换后的字符串输出。
阅读全文