自定義一些C語言的字符串函數

一、代碼如下

? (一)十六進制字符串轉十進制整數?

#include<stdio.h>

// 把一個十六進制字符轉成十進制整數?
int hexToInt(char hexs[]){
? ? int index;
? ? int k = 0;
? ? for(k = 0; ; k++) {
? ? ?? ?if(hexs[k] == '\0') {
?? ??? ? ? ?index = k;
? ? ?? ? ? ?break;
?? ??? ?}
?? ?}
?? ?int temp = 0;
?? ?int result = 0;
?? ?int move = 0;?
?? ?for(k = index - 1; k >= 0; k--) {
?? ??? ?temp = hexs[k];
?? ??? ?if(temp >= '0' && temp <= '9') {
?? ??? ??? ?result = result | ((temp - 48) << (4 * move));
?? ??? ?} else if(temp >= 'A' && temp <= 'Z') {
?? ??? ??? ?result = result | ((temp - 55) << (4 * move));
?? ??? ?}
?? ??? ?move = move + 1;
?? ?}
?? ?
?? ?return result;
}

(二)整數轉十六進制字符串

// 把一個整數轉成十六進制字符?
void toHex(int c, char result[]) {
?? ?char letters[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
?? ?
?? ?result[0] = letters[(c >> 28) & 0x0F];
?? ?result[1] = letters[(c >> 24) & 0x0F];
?? ?
?? ?result[2] = letters[(c >> 20) & 0x0F];
?? ?result[3] = letters[(c >> 16) & 0x0F];
?? ?
?? ?result[4] = letters[(c >> 12) & 0x0F];
?? ?result[5] = letters[(c >> 8) & 0x0F];
?? ?
?? ?result[6] = letters[(c >> 4) & 0x0F];
?? ?result[7] = letters[c & 0x0F];?
?? ?
?? ?result[8] = '\0';
}

(三)求字符串的長度

// 求字符串的字節長度?
int len(char target[]) {
?? ?int k = 0;
?? ?int len = 0;
?? ?for(k = 0; target[k] != 0; k++) {
?? ??? ?len = len + 1;
?? ?}
?? ?return len;
}

(四)在字符串左邊填充指定的字符

// 高位填充字符;
// target是目標數組
// c是填充的字符類型?
// totalLen是期望的字符總位數?
void fill(char target[], char c, int totalLen) {
?? ?int len(char[]);
?? ?int last_len = len(target);
?? ?
?? ?if(totalLen > last_len) {
?? ? ? ?int k = 0;
?? ? ? ?int step = totalLen - last_len;
?? ?
?? ? ? ?// 往后面移動step位?
?? ? ? ?for(k = totalLen - 1; k >= step; k--) {
?? ? ? ??? ?target[k] = target[k - step];
?? ??? ?}
?? ??? ?
?? ??? ?// 填充內容為c;?
?? ??? ?for(k = 0; k < step; k++) {
?? ??? ??? ?target[k] = c;
?? ??? ?}
?? ??? ?
?? ??? ?// 設置空字符?
?? ??? ?target[totalLen] = '\0';
?? ?}
}

?

?(五)轉成大寫

// 字母大寫?
void upper(char c[]){
?? ?int k = 0;
?? ?while(c[k] != '\0') {
?? ??? ?if(c[k]>= 'a' && c[k] <= 'z') {
?? ??? ??? ?c[k] = c[k] - 32;
?? ??? ?}
?? ??? ?k++;
?? ?}
}

? (六)轉成小寫

// 字母小寫?
void lower(char c[]){
?? ?int k = 0;
?? ?while(c[k] != '\0') {
?? ??? ?if(c[k]>= 'A' && c[k] <= 'Z') {
?? ??? ??? ?c[k] = c[k] + 32;
?? ??? ?}
?? ??? ?k++;
?? ?}
}

(七)截取字符串

// 截取字符串?
void substr(char target[], char result[], int offset, int end) {
?? ?int k = 0;
?? ?for(k = offset; k < end; k++) {
?? ??? ?result[k - offset] = target[k];
?? ?}
?? ?result[k] = '\0';
}

(八)文件中讀取UTF-8字符

// 從文件里讀取一個UTF-8字符
void readUTF8(FILE* p, char buff[]) {
?? ?char c1 = 0;
? ? char c2 = 0xC0;
? ? char c3 = 0xE0;
? ? char c4 = 0xF0;

? ? char c = 0;
? ??
? ? // 按照UTF-8的格式讀取?
? ? if(!feof(p)) {
? ? ? ? c = fgetc(p);
? ? ? ??
? ? ? ? // 第一種
? ? ? ? if((c & c4) == c4){
? ? ? ? ? ? buff[0] = c;
? ? ? ? ? ? buff[1] = fgetc(p);
? ? ? ? ? ? buff[2] = fgetc(p);
?? ??? ? ? ?buff[3] = fgetc(p);
? ? ? ? ? ? buff[4] = '\0';
? ? ? ? } else if((c & c3) == c3){
? ? ? ? ? ? buff[0] = c;
? ? ? ? ? ? buff[1] = fgetc(p);
? ? ? ? ? ? buff[2] = fgetc(p);
? ? ? ? ? ? buff[3] = '\0';
? ? ? ? } else if((c & c2) == c2){
? ? ? ? ? ? buff[0] = c;
? ? ? ? ? ? buff[1] = fgetc(p);
? ? ? ? ? ? buff[2] = '\0';
? ? ? ? } else if((c & c1) == c1) {
? ? ? ? ? ? buff[0] = c;
? ? ? ? ? ? buff[1] = '\0';
? ? ? ? }
?? ?} else {
? ? ?? ?buff[0] = '\0';
?? ?}
}?

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

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

相關文章

核函數(機器學習深度學習)

一、核函數的基本概念 核函數&#xff08;Kernel Function&#xff09; 是機器學習中處理非線性問題的核心工具&#xff0c;通過隱式映射將數據從原始空間轉換到高維特征空間&#xff0c;從而在高維空間中實現線性可分或線性建模。其數學本質是計算兩個樣本在高維空間中的內積…

微服務架構中的精妙設計:服務注冊/服務發現-Eureka

一.使用注冊中心背景 1.1服務遠程調用問題 服務之間遠程調?時, 我們的URL是寫死的 String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 缺點&#xff1a; 當更換機器, 或者新增機器時, 這個URL就需要跟著變更, 就需要去通知所有的相關服…

極速版:棧的內存/局部變量表/堆的內存細分

1. 棧的存儲 每個線程都有自己的棧&#xff0c;棧中數據以棧幀&#xff08;Stack Frame&#xff09;為基本單位 線程上正在執行的每個方法都各自對應一個棧楨&#xff08;Stack Frame&#xff09; 棧楨是一個內存區塊&#xff0c;是一個數據集&#xff0c;維系著方法執行過程…

【操作系統】內存泄漏 vs 內存碎片

【操作系統】內存泄漏 vs 內存碎片 內存泄漏&#xff08;Memory Leak&#xff09; vs 內存碎片&#xff08;Memory Fragmentation&#xff09;1. 內存泄漏&#xff08;Memory Leak&#xff09;2. 內存碎片&#xff08;Memory Fragmentation&#xff09;3. 內存泄漏 vs 內存碎片…

力扣HOT100之矩陣:73. 矩陣置零

這道題我沒有想到什么好的辦法&#xff0c;直接暴力AC了&#xff0c;直接遍歷兩次矩陣&#xff0c;第一次遍歷用兩個向量分別記錄出現0的行數和列數&#xff0c;第二次遍歷就判斷當前的元素的行數或者列數是否出現在之前的兩個向量中&#xff0c;若出現了就直接置零&#xff0c…

?Flink/Kafka在python中的用處

一、基礎概念 1. ?Apache Kafka 是什么&#xff1f; ?核心功能&#xff1a;Kafka 是一個分布式流處理平臺&#xff0c;主要用于構建實時數據管道和流式應用程序。?核心概念&#xff1a; ?生產者&#xff08;Producer&#xff09;?&#xff1a;向 Kafka 發送數據的程序。…

推薦系統(十八):優勢特征蒸餾(Privileged Features Distillation)在商品推薦中的應用

在商品推薦系統中&#xff0c;粗排和精排環節的知識蒸餾方法主要通過復雜模型&#xff08;Teacher&#xff09;指導簡單模型&#xff08;Student&#xff09;的訓練&#xff0c;以提升粗排效果及與精排的一致性。本文將以淘寶的一篇論文《Privileged Features Distillation at …

深度學習四大核心架構:神經網絡(NN)、卷積神經網絡(CNN)、循環神經網絡(RNN)與Transformer全概述

目錄 &#x1f4c2; 深度學習四大核心架構 &#x1f330; 知識點概述 &#x1f9e0; 核心區別對比表 ? 生活化案例理解 &#x1f511; 選型指南 &#x1f4c2; 深度學習四大核心架構 第一篇&#xff1a; 神經網絡基礎&#xff08;NN&#xff09; &#x1f330; 知識點概述…

R語言對偏態換數據進行轉換(對數、平方根、立方根)

我們進行研究的時候經常會遇見偏態數據&#xff0c;數據轉換是統計分析和數據預處理中的一項基本技術。使用 R 時&#xff0c;了解如何正確轉換數據有助于滿足統計假設、標準化分布并提高分析的準確性。在 R 中實現和可視化最常見的數據轉換&#xff1a;對數、平方根和立方根轉…

第十四屆藍橋杯省賽電子類單片機學習記錄(客觀題)

01.一個8位的DAC轉換器&#xff0c;供電電壓為3.3V&#xff0c;參考電壓2.4V&#xff0c;其ILSB產生的輸出電壓增量是&#xff08;D&#xff09;V。 A. 0.0129 B. 0.0047 C. 0.0064 D. 0.0094 解析&#xff1a; ILSB&#xff08;最低有效位&#xff09;的電壓增量計算公式…

HarmonyOSNext_API16_媒體查詢

媒體查詢條件詳解 媒體查詢是響應式設計的核心工具&#xff0c;通過判斷設備特征動態調整界面樣式。其完整規則由媒體類型、邏輯操作符和媒體特征三部分組成&#xff0c;具體解析如下&#xff1a; 一、媒體查詢語法結構 基本格式&#xff1a; [媒體類型] [邏輯操作符] (媒體特…

Python+拉普拉斯變換求解微分方程

引言 在數學和工程學中,微分方程廣泛應用于描述動態系統的行為,如電路、電氣控制系統、機械振動等。求解微分方程的一個常見方法是使用拉普拉斯變換,尤其是在涉及到初始條件時。今天,我們將通過 Python 演示如何使用拉普拉斯變換來求解微分方程,并幫助大家更好地理解這一…

【算法】手撕快速排序

快速排序的思想 任取一個元素作為樞軸&#xff0c;然后想辦法把這個區間劃分為兩部分&#xff0c;小于等于樞軸的放左邊&#xff0c;大于等于樞軸的放右邊 然后遞歸處理左右區間&#xff0c;直到空或只剩一個 具體動畫演示詳見 數據結構合集 - 快速排序(算法過程, 效率分析…

《八大排序算法》

相關概念 排序&#xff1a;使一串記錄&#xff0c;按照其中某個或某些關鍵字的大小&#xff0c;遞增或遞減的排列起來。穩定性&#xff1a;它描述了在排序過程中&#xff0c;相等元素的相對順序是否保持不變。假設在待排序的序列中&#xff0c;有兩個元素a和b&#xff0c;它們…

深度學習篇---paddleocr正則化提取

文章目錄 前言一、代碼總述&介紹1.1導入必要的庫1.1.1cv21.1.2re1.1.3paddleocr 1.2初始化PaddleOCR1.3打開攝像頭1.4使用 PaddleOCR 進行識別1.5定義正則表達式模式1.6打印提取結果1.7異常處理 二、正則表達式2.1簡介2.2常用正則表達式模式及原理2.2.1. 快遞單號模式2.2.2…

JavaScript DOM與元素操作

目錄 DOM 樹、DOM 對象、元素操作 一、DOM 樹與 DOM 對象 二、獲取 DOM 元素 1. 基礎方法 2. 現代方法&#xff08;ES6&#xff09; 三、修改元素內容 四、修改元素常見屬性 1. 標準屬性 2. 通用方法 五、通過 style 修改樣式 六、通過類名修改樣式 1. className 屬…

單元測試的編寫

Python 單元測試示例 在 Python 中&#xff0c;通常使用 unittest 模塊來編寫單元測試。以下是一個簡單的示例&#xff1a; 示例代碼&#xff1a;calculator.py # calculator.py def add(a, b):return a bdef subtract(a, b):return a - b 單元測試代碼&#xff1a;test_c…

大模型學習:從零到一實現一個BERT微調

目錄 一、準備階段 1.導入模塊 2.指定使用的是GPU還是CPU 3.加載數據集 二、對數據添加詞元和分詞 1.根據BERT的預訓練&#xff0c;我們要將一個句子的句頭添加[CLS]句尾添加[SEP] 2.激活BERT詞元分析器 3.填充句子為固定長度 代碼解釋&#xff1a; 三、數據處理 1.…

10組時尚復古美學自然冷色調肖像電影照片調色Lightroom預設 De La Mer – Nautical Lightroom Presets

De La Mer 預設系列包含 10 種真實的調色預設&#xff0c;適用于肖像、時尚和美術。為您的肖像攝影帶來電影美學和個性&#xff01; De La Mer 預設非常適合專業人士和業余愛好者&#xff0c;可在桌面或移動設備上使用&#xff0c;為您的攝影項目提供輕松的工作流程。這套包括…

SDL多窗口多線程渲染技術解析

SDL多窗口多線程渲染技術解析 技術原理 SDL多線程模型與窗口管理 SDL通過SDL_Thread結構體實現跨平臺線程管理。在多窗口場景中,每個窗口需關聯獨立的渲染器,且建議遵循以下原則: 窗口與渲染器綁定:每個窗口創建時生成專屬渲染器(SDL_CreateRenderer),避免跨線程操作…