字符中小写改为大写

#include "stdafx.h"
#include "iostream"
using namespace std;
char up(char ch)
{
 if('a'<=ch&&ch<='z')
  return ch-32;
 else
  return ch;
}


int _tmain(int argc, _TCHAR* argv[])
{
 char str[255];
 cout<<"输入字符串";
 scanf("%s",str);
 for(int i=0;str[i]!='\0';i++)
 {
  str[i]=up(str[i]);
  
 }
 cout<<str;
 return 0;
}

### 实现字符串中字母大小写转换 #### C语言实现方法 在C语言中,可以使用ASCII码来处理字符的大小写转换。对于小写字母大写,可以通过减去32(即'A'-'a'=32)来完成;反之则加上32。 ```c #include <stdio.h> #include <string.h> void convertCase(char *str) { int i; for (i = 0; str[i]; ++i) { if (str[i] >= 'a' && str[i] <= 'z') // 如果是小写字母,则转换为大写 str[i] -= 32; else if (str[i] >= 'A' && str[i] <= 'Z') // 如果是大写字母,则转换为小写 str[i] += 32; } } int main() { char s[] = "AbCdEfG"; printf("Original string: %s\n", s); convertCase(s); // 转换大小写 printf("Converted string: %s\n", s); return 0; } ``` 这段代码展示了如何遍历整个字符串并逐个改变每个字符的情况[^1]。 #### Go语言实现方式 Go语言提供了内置函数`strings.ToUpper()`用于将字符串全部变为大写,以及`strings.ToLower()`用来变成全小写。如果想要手动控制这个过程也可以像下面这样: ```go package main import ( "fmt" ) func toggleCase(str string) string { result := "" for _, r := range str { if r >= 'a' && r <= 'z' { result += string(r - 32) } else if r >= 'A' && r <= 'Z' { result += string(r + 32) } else { result += string(r) } } return result } func main() { s := "HeLlO wOrLd!" fmt.Printf("Original String:%v\n", s) toggledString := toggleCase(s) fmt.Printf("Toggled Case String:%v\n", toggledString) } ``` 此程序会迭代给定字符串中的每一个rune(Unicode编码单位),依据其是否属于英文字母范围来进行相应的调整。 #### Java实现方案 Java同样支持直接调用API如`toLowerCase()`和`toUpperCase()`来做整体变换。而自定义逻辑如下所示: ```java public class Main { public static void main(String[] args) { String inputStr = "TeStInG"; System.out.println("Input : "+inputStr); StringBuilder outputBuilder = new StringBuilder(); for(int i=0;i<inputStr.length();i++){ char ch=inputStr.charAt(i); if(ch>='A'&&ch<='Z'){ outputBuilder.append((char)(ch+('a'-'A'))); }else if(ch>='a'&&ch<='z'){ outputBuilder.append((char)(ch-('a'-'A'))); }else{ outputBuilder.append(ch); } } System.out.println("Output:"+outputBuilder.toString()); } } ``` 上述例子说明了怎样通过判断字符位置关系,在保持非英文字符不变的情况下切换大小写的策略[^3]。 #### 汇编语言解决方案 汇编语言里通常借助BIOS中断服务或者DOS功能调用来执行特定任务。这里给出一个简单的80x86实模式下的实例: ```assembly .model small .stack 100h .data msg db 'hello world!', '$' .code main proc mov ax,@data mov ds,ax lea dx,msg ; load address of message into DX register call uppercase_conversion ; call subroutine to perform conversion mov ah,9 ; DOS function number for printing a string terminated by $ int 21h ; invoke interrupt handler which prints the converted string mov ah,4Ch ; terminate program with exit code specified in AL register int 21h main endp uppercase_conversion proc near push si ; save SI on stack before using it as index pointer mov si,dx ; copy starting address from DX to SI so we can modify SI freely during loop next_char: lodsb ; Load byte at DS:[SI], incrementing SI automatically after loading. cmp al,'$' ; check whether current character is termination symbol je done ; jump out when reaching end marker cmp al,'a'-1 ; compare against lower limit ('a') jb not_lower ; branch over next instruction unless between 'a' and 'z' sub al,20h ; subtract hex value corresponding to difference between lowercase/uppercase ASCII codes not_lower: jmp short next_char ; repeat until all characters processed or terminator found done: pop si ; restore original state of registers used within procedure ret ; return control back to caller once finished processing entire sequence uppercase_conversion endp end main ``` 该片段演示了一个子程序,它接收指向待修改消息首地址的数据段寄存器DX作为参数,并对其进行逐字节扫描直至遇到结束标记'$'[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值