數據結構:字符串:大小寫轉換(changing case of a string)

目錄

第一性問題:什么是“大小寫”?

逐步構造代碼:全部轉為大寫?


我們現在用 第一性原理 的方式,從字符串與字符的本質出發,一步步推導出如何在 C 語言中將字符串中的字母變成全部大寫或全部小寫。

第一性問題:什么是“大小寫”?

我們必須問清楚:

?“A”和“a”之間的差異在計算機里是什么?

答案:ASCII碼!

字符ASCII值
'A'65
'a'97
'B'66
'b'98
'Z'90
'z'122

觀察:

每個小寫字母與對應的大寫字母的 ASCII 差值是:32

字母對差值
'a' - 'A'97 - 65 = 32
'z' - 'Z'122 - 90 = 32

推導公式:

  • 把小寫轉大寫:ch - 32

  • 把大寫轉小寫:ch + 32

但前提是:你必須先判斷這個字符是字母!

?明確目標(功能定義)

1. 輸入一個以 \0 結尾的字符串
2. 將里面所有英文字母統一轉為大寫 或 統一轉為小寫
3. 非字母字符保持不變

如何判斷字符是不是字母?

我們繼續從 ASCII 的第一性原理推導:

范圍條件ASCII
大寫字母'A' <= ch <= 'Z'65~90
小寫字母'a' <= ch <= 'z'97~122

逐步構造代碼:全部轉為大寫?

Step 1: 定義字符串

char str[] = "Hello World! 123";

Step 2: 遍歷字符數組,直到遇 \0

for (int i = 0; str[i] != '\0'; ++i) {// 每個字符處理
}

Step 3: 判斷小寫字母并轉換為大寫

if (str[i] >= 'a' && str[i] <= 'z') {str[i] = str[i] - ('a' - 'A');  // 或者 -32
}

完整函數

void to_uppercase(char* str) {for (int i = 0; str[i] != '\0'; ++i) {if (str[i] >= 'a' && str[i] <= 'z') {str[i] = str[i] - ('a' - 'A');}}
}

轉為小寫(相同邏輯,反方向)

void to_lowercase(char* str) {for (int i = 0; str[i] != '\0'; ++i) {if (str[i] >= 'A' && str[i] <= 'Z') {str[i] = str[i] + ('a' - 'A');}}
}

完整程序

#include <stdio.h>void to_uppercase(char* str) {for (int i = 0; str[i] != '\0'; ++i) {if (str[i] >= 'a' && str[i] <= 'z') {str[i] -= 32;}}
}void to_lowercase(char* str) {for (int i = 0; str[i] != '\0'; ++i) {if (str[i] >= 'A' && str[i] <= 'Z') {str[i] += 32;}}
}int main() {char str1[] = "Hello World!";char str2[] = "Hello World!";to_uppercase(str1);to_lowercase(str2);printf("Uppercase: %s\n", str1);  // 輸出:HELLO WORLD!printf("Lowercase: %s\n", str2);  // 輸出:hello world!return 0;
}

總結邏輯鏈

步驟原理
為什么能判斷大小寫ASCII 編碼連續且規范
為什么能轉換字母大小寫之間固定差值 32
為什么能存空格/符號只要不是 \0,都可以是字符串一部分
為什么能逐個訪問字符字符串本質是字符數組
為什么知道終止全靠 '\0' 終結符

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90296.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90296.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

閑庭信步使用圖像驗證平臺加速FPGA的開發:第三十二課——車牌識別的FPGA實現(4)車牌字符的分割定位

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊top_tb.bat文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程…

03_java_運行機制

1. java執行流程2. 什么是編譯3. 什么是運行

鴻蒙卡片開發保姆級教程

卡片 1. 卡片概念 什么是卡片&#xff1f;卡片用來顯示或者提示一些基本信息或者進行一些基本操作。注意不能做重邏輯&#xff0c;所有重要邏輯全部交給應用如果是元服務如何喚醒&#xff1f;因為元服務不提供桌面應用圖標&#xff0c;我們可以通過用戶手動的方式在桌面上添加一…

反向傳播及優化器

反向傳播&#xff08;Backpropagation&#xff09;反向傳播是計算梯度的算法&#xff0c;核心作用是高效求解 “損失函數對模型所有參數的偏導數”&#xff08;即梯度&#xff09;。沒有反向傳播&#xff0c;深度學習的大規模訓練幾乎不可能實現。 整個過程像 “從終點回溯到起…

【機器學習深度學習】生成式模型的評估與驗證

目錄 前言 1. 主觀評估&#xff1a;以人為本的質量判斷 1.1 什么是主觀評估&#xff1f; 1.2 主觀評估的核心流程 1.3 主觀評估的優缺點 2. 客觀評估&#xff1a;量化的性能衡量 2.1 什么是客觀評估&#xff1f; 2.2 常見的客觀評估指標 文本生成 圖像生成 多模態生…

Linux文件——Ext2文件系統(3)_軟硬鏈接

文章目錄文件的軟硬鏈接軟鏈接硬鏈接軟硬鏈接對比軟硬鏈接應用軟硬鏈接注意事項總結文件的軟硬鏈接 本篇文章將重點講解文件系統中的一個重要的知識點&#xff1a; 即文件的軟硬鏈接。 軟鏈接 對于軟鏈接的講解&#xff0c;我們先來使用一個指令看看效果&#xff1a;ln -s 被…

Java SE:類與對象的認識

Java中的類與對象&#xff1a;構建程序世界的基石 在Java編程的世界里&#xff0c;類與對象是面向對象編程&#xff08;OOP&#xff09;的核心概念&#xff0c;它們就像構建大廈的磚瓦&#xff0c;支撐起整個程序的結構。理解類與對象&#xff0c;是掌握Java編程的關鍵一步。 類…

Hexo - 免費搭建個人博客03 - 將個人博客托管到github,個人博客公開給大家訪問

導言我的博客&#xff1a;https://q164129345.github.io/ 既然要將個人博客托管到github&#xff0c;首先我們肯定要有一個github賬戶。另外也需要在電腦上安裝另外一個著名的代碼管理工具git。 一、創建github倉庫二、在Hexo設置部署的內容# Deployment## Docs: https://hexo.…

一次Oracle集群腦裂問題分析處理

問題描述 填寫問題的基礎信息。 系統名稱 數據庫集群 IP地址 xxxxxx 操作系統 Linux 數據庫 Oracle 11.2.0.4 癥狀表現 問題的癥狀表現如下 4月26號晚22點02分左右&#xff0c;HIS集群發生腦裂&#xff0c;十幾分鐘后&#xff08;22.18&#xff09;一節點集群率先獲…

0基礎法考隨手筆記 02(刑訴法專題04 辯護與代理)

0基礎法考隨手筆記 02&#xff08;刑訴法專題04 辯護與代理&#xff09; 1.值班律師相關權力義務2. 3. 4.什么是強制醫療 注意&#xff1a;為強制醫療指派的律師&#xff0c;是訴訟代理人&#xff0c;不是辯護人&#xff0c;因為此人不會被追究刑事責任。 “強制醫療” 是刑事訴…

HF86611_VC1/HF86611Q_VC1:多通道USB HiFi音頻解碼器固件技術解析

引言隨著音頻技術的不斷發展&#xff0c;多通道音頻處理和多接口兼容性成為現代音頻設備的重要需求。本文將介紹一款基于XMOS XU316技術的多通道USB HiFi音頻解碼器固件——HF86611_VC1/HF86611Q_VC1&#xff0c;這是一款專為多接口HiFi音頻應用設計的軟件解決方案。產品概述HF…

python---列表(List)

文章目錄創建列表基本操作訪問元素&#xff08;索引&#xff09;切片操作修改列表常用方法列表推導式多維列表列表是 Python 中最基本、最常用的數據結構之一&#xff0c;它是一個有序的可變集合&#xff0c;可以包含不同類型的元素。創建列表 # 空列表 empty_list [] empty_…

ESP32-S3學習筆記<3>:UART的應用

ESP32-S3學習筆記&#xff1c;3&#xff1e;&#xff1a;UART的應用1. 頭文件包含2. UART的配置2.1 uart_num的選擇2.2 uart_config的設定2.2.1 baud_rate/波特率設置2.2.2 data_bits/數據位數設置2.2.3 parity/奇偶校驗位設置2.2.4 stop_bits/停止位設置2.2.5 flow_ctrl/流控位…

【Vue3】加載高德地圖案例

官方API:展示地圖-入門教程-地圖 JS API 2.0 | 高德地圖API 1、獲取高德Key 參考&#xff1a;準備-地圖 JS API 2.0 | 高德地圖API 2、創建工程 npm create vitelatest 3、下載依賴集運行項目 npm install npm i amap/amap-jsapi-loader --save npm run dev 4、編寫核心…

【工具】Pycharm隱藏側邊燈泡提示

問題描述 在Pycharm中&#xff0c;每行前面很容易出現一個小燈泡&#xff0c;有時候很影響操作&#xff0c;需要將其取消掉設置方法打開設置 按 CtrlAltS 打開設置對話框或者通過菜單 File → Settings&#xff08;在 macOS 上是 PyCharm → Preferences&#xff09;導航到外觀…

XSS相關理解

由于本人對一小部分dom型xss、原型鏈污染和存儲型xss理解不夠透徹&#xff0c;因此在本篇文章中原型鏈污染和存儲型xss偏重進行概念理解或簡單的代碼理解&#xff0c;隨后會慢慢補充 文章目錄1 XSS概述1.1 什么是XSS&#xff1f;1.2 XSS主要分三種類型2 XSS基礎2.1 XSS基礎練習…

Odoo:免費開源的金屬制品行業ERP管理軟件

引言開源智造Odoo數字化解決方案專家團隊意識到&#xff0c;在當今全球市場中&#xff0c;將盈利能力和競爭力最大化的機會促使許多金屬制品制造商投資于推進業務發展的新技術。金屬制品會計軟件是企業用來處理他們業務和增加利潤的解決方案。某金屬制品加工工藝流程圖&#xf…

Ubuntu22.04配置GTest測試框架

前言 鴻蒙系統的代碼倉庫使用GTest作為單元測試的工具。特性開發時&#xff0c;需要寫demo以驗證開發思路。因此有必要搭建GTest開發環境配合鴻蒙特性開發做開發demo。 我測試環境是wsl2 Ubuntu22.04 LTS。 搭建過程 安裝必備C組件 sudo apt install -y unzip g gcc cmake …

學習日志15 python

1 filter() 函數filter(function, iterable)filter函數是python中的高階函數, 第一個參數是一個篩選函數, 第二個參數是一個可迭代對象, 返回的是一個生成器類型, 可以通過next獲取值。filter() 函數是 Python 內置的高階函數&#xff0c;其主要功能是對可迭代對象中的每個元素…

Linux 環境下安裝 MySQL 8.0.34 二進制 詳細教程 附docker+k8s啟動

文章目錄Linux 環境下安裝 MySQL 8.0&#xff08;二進制&#xff09;詳細教程準備工作安裝依賴包下載并解壓 MySQL下載 MySQL 二進制包解壓 MySQL移動目錄并創建 MySQL 用戶配置 MySQL配置數據目錄與日志目錄編輯配置文件 /etc/my.cnf初始化 MySQL 數據庫配置啟動腳本與環境變量…