分享好友 编程语言首页 频道列表

C语言中字母大小写转化简单示例 c语言的字母大小写转换

C/C++教程  2023-02-09 05:140

C语言入门的时候都会遇到要求写大小写转换的题目

这类题目主要通过ASCII(美国信息交换标准代码)码差值实现,

A对应ASCII码十进制数字是65,a对应ASCII码十进制数字是97,

即大小写字母之间ASCII码差值为32,想要将大写字母转换为小写字母可以将该字符ASCII码值+32,同理小写字母转换成大写字母只需将该字符ASCII码值-32。

咱们先来看看这个代码:

C语言中字母大小写转化简单示例

 咋一看,欸?很不错,没啥毛病,编译运行试一下,发现还不错

C语言中字母大小写转化简单示例

C语言中字母大小写转化简单示例

 确实可以,但是.....这样呢?

C语言中字母大小写转化简单示例

 啊这.........这是怎么回事呢?

原来,

C语言中字母大小写转化简单示例

 我们之前的这个else,它的执行条件是之前if里的范围的补集,也就是说只要是在(x<='a'||x>='z')的范围内,它都会执行“x=x+32”,所以出现上述输入字符,也能输出的情况。

这个时候,只要具体化else的执行条件,将其变成else if,即可。

如下:

C语言中字母大小写转化简单示例

 这样就可以啦!

附一个C语言字母大小写互换的简单方法

字母的大小写互换其实很简单

回到最基本的数据的存储形式,从八位二进制角度去看大写字母和小写字母,你会发现它们的低四位是相同的,高四位有细微差别。

举例:

ASCII DEC BIN
‘A’ 65 01000001
‘a’ 97 01100001
‘B’ 66 01000010
‘b’ 98 01100010
‘X’ 88 01011000
‘x’ 120 01111000

仔细观察 发现是第六位不同!

大小写互换的方法

  • 考虑到低四位完全相同 只用互换高四位的第六位就可以实现大小写互换
  • 互换高四位的某一位而不改变低四位,我们联想到位运算中的按位异或^ 关于按位异或 详见按位异或
  • 由按位异或的知识,我们可以寻找一个数,使得任意的一个八位二进制数与它进行异或操作后,高四位的第六位01取反,低四位不变
  • 回顾我们的目标 假如把'A'变为'a' 我们需要把01000001变为01100001,也就是把第六位的0变为1 。
  • 我们找到这个数了!它的二进制是00100000 十进制是32
  • 01000001^00100000=01100001,是不是很神奇?同理把小写字母'a'变为'A'也只需要把它与32进行按位异或操作就可以啦~
#include<stdio.h>
int main(){
    int i;
    char s[100];
    //读入字符串
    gets(s);
    for(i=0;s[i]!='\0';i++)
    {
        if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))
        s[i]^=32;//核心语句,实现字符串中字母的大小写互换
    }
    printf("%s",s);
    return 0;
}

样例输入->

Hello,Java!

样例输出->

hELLO,jAVA!

总结

原文地址:https://blog.csdn.net/jebe_lwb/article/details/118888103

查看更多关于【C/C++教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Rust应用调用C语言动态库的操作方法
目录外部功能接口FFIUDP套接字的读超时Rust调用C语言动态库中的函数避免重复造***,使用Rust官方C语言库外部功能接口FFI虽然高级(脚本)编程语言的功能丰富,表达能力强,但对底层的一些特殊操作的支持并不完善,就需要以其他编程语言来实现。调用其他编程语

0评论2023-02-09585

Delphi中获取Unix时间戳及注意事项(c语言中time()是按格林威治时间计算的,比北京时间多了8小时)
uses DateUtils;DateTimeToUnix(Now) 可以转换到unix时间,但是注意的是,它得到的时间比c语言中time()得到的时间大了8*60*60这是因为Now是当前时区的时间,c语言中time()是按格林威治时间计算的,北京时间比格林威治时间多了8小时DateTimeToUnix(Now)-8*60*

0评论2023-02-09876

Unicode与UTF-8互转(c语言和lua语言) python utf-8转unicode
1. 基础1.1 ASCII码我们知道, 在计算机内部, 全部的信息终于都表示为一个二进制的字符串. 每个二进制位(bit)有0和1两种状态, 因此八个二进制位就能够组合出 256种状态, 这被称为一个字节(byte). 也就是说, 一个字节一共能够用来表示256种不同的状态, 每个状态

0评论2023-02-09468

R语言之merge详解 c语言merge函数代码
merge是R语言中用来合并数据框的函数merge函数的声明:?1234merge(x, y, by = intersect(names(x), names(y)),      by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,      sort = TRUE, suffixes = c(".x"

0评论2023-02-09489

R语言调用的C语言源代码查询 R语言 c
R语言使用时可以调用自己写的C代码,但是有些C函数是软件包自带的,怎么查询在使用软件包 kerfdr 时,涉及到一个函数y = .C("massdist", x = as.double(xtrunc), xmass = as.double(tau[trunc]/sum(tau[trunc])), nx = nx, xlo = as.double(lo), xhi = as.dou

0评论2023-02-09487

centos安装与配置R语言 centos配置c语言环境
Linux下安装R语言一、编译安装      由于采用编译安装,所以需要用到gcc编译环境,在编译前check文件时还会用到libXt-devel和readline-devel两个依赖,所以在编译R语言源码时先将这些工具和依赖包准备好。readline-devel 也可以不安装,不安装此包R语言编

0评论2023-02-09905

C语言利用链表实现学生成绩管理系统
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示

0评论2023-02-09722

C语言通过三种方法实现属于你的通讯录
目录一、基础版本1.1 通讯录的个人信息(结构体来实现)1.2通讯录名单1.3人员初始化1.4菜单1.5主函数二、功能的实现2.1、增加人数2.2、删除人数2.3、查找2.4、展示2.5、排序(这里我是通过名字)三、通讯录进阶(设置动态存储)3.1通讯录从静态改为动态3.2通

0评论2023-02-09881

C++集体数据交换实现示例讲解 c语言两个数据交换
目录一、说明二、示例和代码一、说明到目前为止介绍的功能共享一对一的关系:即一个进程发送和一个进程接收。链接是通过标签建立的。本节介绍在多个进程中调用相同参数但执行不同操作的函数。对于一个进程,函数可能会发送数据,对于另一个进程,它可能会接收

0评论2023-02-09687

C语言中#if的使用 c语言中%c
目录#if定义#if使用#if的后面接的是表达式#if defined的使用ifdef的使用结尾#if定义#if和#endif是一组同时使用的,叫做条件编译指令。#if与#define、#include等指令一样是由预处理器这个强大的工具处理的,预处理器可以在编译前处理c程序。#if使用#if的后面接

0评论2023-02-09343

更多推荐