字符函数内存函数———C语言

news2025/1/11 21:43:55

字符分类函数

头文件:

        ctype.h

函数功能
iscntrl判断字符是否为控制字符
isspace判断字符是否为空白字符(空格,换页、换行、回车、制表符或垂直制表符)
isdigit判断字符是否为十进制数字
isxdigit判断字符是否为十六进制数字(0-9)(a-f)(A-F)
isupper判断字符是否为大写英文字母
islower判断字符是否为小写英文字母
isalpha判断字符是否为英文字母
isalnum判断字符是否为字母或数字
ispunct判断字符是否为标点符号

字符转换函数:

函数功能
tolower把大写字母转换为小写字母
toupper把小写字母转换为大写字母
#include <stdio.h>
#include <ctype.h>
int main() {
    char ch1, ch2;
    printf("小写转大写:\n");
    printf("input a character:");
    scanf("%c", &ch1);
    ch2 = toupper(ch1);
    printf("transform %c to %c.\n", ch1, ch2);
    printf("大写转小写:\n");
    char str[1024] = "Hello World!";
    char* p_str = str;
    char res[1024] = { 0 };
    char* p_res = res;
    while (*p_str) {
        if (isupper(*p_str)) {
            *p_res = tolower(*p_str);
        }
        else {
            *p_res = *p_str;
        }
        p_str++;
        p_res++;
    }    
    printf("%s transform:%s\n", str, res);
    return 0;
}

内存函数:

1.memcpy

原型:void * memcpy ( void * destination, const void * source, size_t num );

原理:从source开始位置向后复制num个字节的数据到destination的内存位置

#include <stdio.h>
#include <string.h>
typedef  struct  Stu{
        char name[1024];
        int age;
    }S;
int main() {
        int nums[] = { 1,2,3,4 };
        int numsBak[10] = { 0 };
        memcpy(numsBak, nums, sizeof(nums));
        int length = sizeof(nums) / sizeof(nums[0]);
        for (int i = 0; i < length; i++) {
                printf("%d\n", numsBak[i]);
        }        
        // 结构体的拷贝
        S students[] = { {"xiaoming",10},{"xiaozhao",30} };
        S studentsBak[3] = { 0 };
        memcpy(studentsBak, students, sizeof(students));
        for (int i = 0; i < 3; i++) {
                S student = studentsBak[i];
                printf("uname:%s,age:%d\n", student.name, student.age);
        }
        return 0;
}

注意:该函数不检测源中的任何终止字符,它总是精确地复制num个字符 

eg:

#include <stdio.h>
#include <string.h>
int main() {
    char src[] = "He was an unusually\0 complex man";//这里的/0不被在意
    char dist[1024] = { 0 };    memcpy(dist, src, 200);
    printf("src:%s\ndist:%s\n", src, dist);
    printf("dist[21]=%c\n",dist[21]);
    return 0;
}

2.memmove

原型:void * memmove ( void * destination, const void * source, size_t num );

原理:将num个字节的值从源指向的位置复制到目标指向的内存块。复制就像使用了中间缓存,从而允许目标和源重叠, 该函数不检测源中的任何终止字符,它总是精确地复制num个字符。

section one :

        destination的起始地址在src起始地址之后

section two :

        destination的结束地址在src结束地址之前

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "abcdef";
    // 重叠的区域复制:从 str + 1 开始的部分复制到 str 开头
    memmove(str, str+1, 5);
    printf("Result: %s\n", str);  // 输出: "bcdef"
    return 0;
}

3.memcmp

原型:int memcmp ( const void * ptr1, const void * ptr2, size_t num );

原理:

  • 将ptr1所指向的内存块的前num字节与ptr2所指向的前num字节进行比较,如果它们都匹配则返回0
  • 在两个内存块中不匹配的第一个字节在ptr1中的值小于ptr2中的值,则返回<0的数(比较的是字母转换后的ASCII值)
  • 在两个内存块中不匹配的第一个字节在ptr1中的值大于ptr2中的值,则返回>0的数
#include <stdio.h>
#include <string.h>
int main(){
    char buffer1[] = "DWGaOtP12df0";
    char buffer2[] = "DWgAOTP12DF0";
    int n = memcmp(buffer1, buffer2, sizeof(buffer1));
    if (n > 0) {
        printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
    }    else if (n < 0) {
        printf("'%s' is less than '%s'.\n", buffer1, buffer2);
    }    else { 
        printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
    }
    return 0;
}

4.memset

原型:void * memset ( void * ptr, int value, size_t num );

原理:将ptr指向的内存块的前num个字节设置为指定的值(解释为unsigned char)

#include <stdio.h>
#include <string.h>
int main() {
    char name[] = "almost every programmer should know memset!";
    // 将name指向的内存块的前6个字节设置为-
    memset(name, '-', 6);
    printf("%s\n", name);
    return 0;
}

 

  • 这是本人的学习笔记不是获利的工具,小作者会一直写下去,希望大家能多多监督
  • 文章会每攒够两篇进行更新发布(受平台原因,也是希望能让更多的人看见)
  • 感谢各位的阅读希望我的文章会对诸君有所帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二分+划分型dp,CF 360B - Levko and Array

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 B - Levko and Array 二、解题报告 1、思路分析 最小化最大值&#xff0…

射频前端加LNA放大具体应用方案介绍

1.1编写目的 接收机为了适应在一些应用场合要求&#xff0c;需要增大接收强度&#xff0c;必要时在前段增加一个低噪声放大器LNA以增大链路增益&#xff0c;本文编写一个最简单的低成本的LNA&#xff0c;记录是想给大家一个引导思路或借鉴。 1.2背景 以micrf220这款芯片在…

A4-80内六角螺栓产品特性及应用

A4-80内六角螺栓是一种常用的紧固件&#xff0c;广泛应用于需要高强度和耐腐蚀性能的各种场合。下面我们就来科普一下A4-80内六角螺栓的产品特性和应用场景。 产品特性 材质 A4-80内六角螺栓通常采用A4等级的不锈钢材料制成&#xff0c;这意味着它们具有优异的耐腐蚀性能&#…

【R语言】基于多模型的变量重要性图 (Variable Importance Plots)

变量重要性图 Variable Importance Plots 1. 写在前面2.1数据导入2.2 模型训练2.3 变量重要性2.4 变量重要性图2.5 模型模拟验证3.基于caret包计算变量重要性 1. 写在前面 好久没有更新博客了&#xff0c;正好最近在帮老师做一个项目&#xff0c;里面涉及到了不同环境变量的重要…

基于鸿蒙Next模拟扫图识物的一个过程

一、功能介绍&#xff08;基础&#xff09; 基于鸿蒙Next模拟扫图识物的一个过程&#xff0c;扫描到图片&#xff0c;提示出相关的图片内容&#xff0c;是一个什么东西。 二、使用场景&#xff08;大类&#xff09; 支付、社交、信息获取、在线调查、教育学习等等。 三、实现…

Vue指令:v-cloak、v-once、v-pre 指令

1、v-cloak 指令 v-cloak 指令可以隐藏未编译的 Mustache 标签直到实例准备完毕&#xff0c;否则在渲染页面时&#xff0c;有可能用户会先看到 Mustache 标签&#xff0c;然后看到编译后的数据。 &#xff08;1&#xff09;设置CSS样式 display:none <style type"te…

别再盲目推广了!用Xinstall,效果翻倍

在移动互联网时代&#xff0c;App的运营推广成为了开发者们最为关注的话题之一。然而&#xff0c;随着市场竞争的加剧&#xff0c;推广难度也越来越大。这时候&#xff0c;一款名为Xinstall的品牌走进了我们的视线&#xff0c;它以其独特的技术和解决方案&#xff0c;为App推广…

【系统架构设计】软件架构设计(2)

【系统架构设计】软件架构设计&#xff08;1&#xff09; 软件架构概述架构需求与软件质量属性软件架构风格层次系统架构风格面向服务的架构SOA概述微服务微服务和SOA差异 软件架构概述 架构需求与软件质量属性 软件架构风格 层次系统架构风格 面向服务的架构 SOA概述 面…

【生日视频制作】教师节中秋节国庆节直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】

飞机生日视频制作教程AE模板改文字特效广软件告生成器玩法素材 怎么如何做的【生日视频制作】教师节中秋节国庆节直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频…

一起学Java(3)-Java项目构建工具Gradle和Maven场景定位和优缺点对比

在第一步创建的项目&#xff08;java-all-in-one&#xff09;项目里&#xff0c;我们提到了使用Gradle作为项目构建工具。看到这里&#xff0c;不知道你是否有疑惑&#xff0c;什么是项目构建工具。Java项目常用构建工具有哪些&#xff1f;都有什么特点&#xff1f; 带着疑惑&…

网络安全——基础知识记忆梳理

1. SQL注入攻击 SQL注入攻击是一种常见的网络安全威胁&#xff0c;它利用Web应用程序中对用户输入的数据的不正确处理&#xff0c;攻击者可以在SQL查询中注入恶意代码&#xff0c;从而执行非授权的数据库操作。这种攻击方式可以导致数据泄漏、数据篡改、绕过认证等多种安全问题…

【java计算机毕设】足浴城消费系统小程序MySQL ssm vue uniapp maven项目设计源代码 编程语言 小组课后作业 寒暑假作业

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】足浴城消费系统小程序MySQL ssm vue uniapp maven项目设计源代码 编程语言 小组课后作业 寒暑假作业 2项目介绍 系统功能&#xff1a; 足浴城消费系统小程序包括管理员、用户、商家三种角色。 管理员功能&…

Linux基础I/O之文件缓冲区

一、缓冲区的基本概念 缓冲区这个概念&#xff0c;我相信大家或多或少的有听到过&#xff0c;那么其到底是个什么东西呢&#xff1f; 简单地理解一下&#xff0c;其可以被看做一部分的内存&#xff08;可以认为是malloc来的&#xff09;。 那为什么要有缓冲区这个东西呢&#x…

C语言典型例题48

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题3.8 有4个圆塔&#xff0c;圆形分别为&#xff08;2,2&#xff09;、&#xff08;-2,2&#xff09;、&#xff08;-2&#xff0c;-2&#xff09;、&#xff08;2&#xff0c;-2&#xff09;&#xff0c;圆半径为…

uni-app 手记集。

1、uni-app 是一个使用 Vue.js 开发的前端应用的框架&#xff0c;所以不会Vue.js的小伙伴可以先去看看Vue.js的基础教学。 2、.vue文件结构 <template><div class"container"></div> </template><script type"text/ecmascript-6&q…

开放式耳机怎么戴?会有伤害?四款开放式蓝牙耳机排行榜前十名

老实说&#xff0c;开放式耳机对耳朵会产生什么伤害&#xff1f;我不太能想出来。我倒是觉得入耳式耳机可能会&#xff0c;因为入耳式耳机需将耳机塞入耳朵耳道&#xff0c;那就会对耳道产生影响。使用者在佩戴入耳式耳机的时候耳道会变成一个接近完全封闭的状态&#xff0c;耳…

【实战篇】Port配置

目录 1 前言1.1 开发板特性1.2 电路原理分析2 步骤2.1 General配置2.2 PortContainer配置3 总结1 前言 本文讲解如何配置Port模块。Port的引脚配置在整个实验中非常的重要,一旦配置错误可能会导致实验失败。引脚如何配置,完全依赖于我们的硬件设计和芯片型号,我们这里以英飞…

PE文件空白区添加代码

1、C源码 #include <iostream> #include<windows.h>int main() {int i 1;std::cin >> i;if (i 100){MessageBoxA(0, 0, 0, 0);}return 0; }2、将上述源码编译成可执行文件PEParase.exe&#xff0c;备用 3、使用010Editor打开该exe文件&#xff0c;查找PE…

git revert操作引起的代码丢失以及解决方案

场景如下&#xff1a; 某项目下有很多开发中的分支&#xff0c;比如分支a&#xff0c;b&#xff0c;c&#xff0c;d都合并到了一个test分支上&#xff1b;某次误操作将test分支内容合到了分支e上&#xff0c;然后紧接着又revert了这次合并&#xff0c;试图撤销合并&#xff1b…

如何解决Windows虚拟机不能安装vmtools的问题?

今天学到个小tips给大家分享一下&#xff01;&#xff01;&#xff01;解决win7安装不了vmtools的问题&#xff0c;以及如何打补丁&#xff01; 大家有没有遇到过下面的问题&#xff0c;就是在再给win7装vmtools的时候无法安装的情况&#xff0c;我这里这个是win7的旗舰版就遇…