自定义一些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.mzph.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),避免跨线程操作…