当前位置: 首页 > news >正文

(C语言)常见的字符串与内存操作函数

问:

1. Solve the problems:我想用三种方法求字符串的长度怎么办?

2. strlen处理的字符串中有什么时需要注意:什么只记为什么?当什么不起什么作用时,什么不计算在内,编译器会把什么,什么,什么或者什么当成什么,strlen碰到什么就会怎么样,而什么无影响?

3. Solve the problems:我想实现两个字符串拷贝怎么办?

4. Solve the problems:我想实现两个字符串拼接怎么办?

5. Solve the problems:我想实现两个字符串比较怎么办?

6. Solve the problems:如何判断一个字符串是不是另外一个字符串的子字符串?

7. Slove the problems:如何把字符串"Elon Musk&Telsa:SpaceX@C++"肢解成"Elon Musk","Telsa","SpaceX","C++"分别打印出来呢?

8. 由于什么会怎么样,因此用什么进行什么的字符串一般都是什么?

9. Solve the problems:我想设计一个密码登录器,要求:密码必须有大写字母≥2个,小写字母≥3个,数字≥3个,长度≤20,不得含有敏感词汇“Elon Musk”,该怎么写?

10. Solve the problems:报刊头标arr : “Elon Musk Is A Great Successful Person! ”如何将Is的I改成小写,并且后面全部大写?

11. Solve the problems:我想把内存数据(不受数据类型限制)直接无脑拷贝到另一个内存区域,该怎么办?

12. Solve the problems:上述情况下两块内存区域有重叠,该怎么办?

13. Solve the problems:我想要把学生结构体的成员年龄初始化为0,成绩初始化为0,姓名字符初始化为*,该怎么办?


答:

//1
size_t my_strlen(const char* str)
{assert(str);size_t count = 0;while (*str){count++;str++;}return count;
}//2
size_t my_strlen(const char* str)
{assert(str);if (*str){return my_strlen(str + 1) + 1;}else{return 0;}
}//3
size_t my_strlen(const char* str)
{assert(str);const char* start = str;while (*str){str++;}return str - start;
}
  1. 转义字符,转义字符整体,一个字符,\,转义,\本身,\0,\00,\000,\x000....,\0,停下来,sizeof。

//解决方法
char* my_strcpy(char* dest, const char* src)
{assert(dest && src);char* ret = (char*)dest;while (*dest++ = *src++){;}return ret;
}
//解决方法
char* my_strcat(char* dest, const char* src)
{assert(dest && src);char* ret = (char*)dest;while (*dest){dest++;}while (*dest++ = *src++){;}return ret;
}
//解决方法
int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);while (*str1 == *str2){if (*str1 == '\0'){return 0;}str1++;str2++;}if (*str1 > *str2){return 1;}else{return -1;}
}
//解决方法
char* my_strstr(const char* str1, const char* str2)
{assert(str1 && str2);if (*str2 == '\0')return (char*)str1;char* s1 = NULL;char* s2 = NULL;char* cp = (char*)str1;while (*cp){s1 = cp;s2 = str2;while (*s1 == *s2){s1++;s2++;if (*s2 == '\0'){return cp;}}cp++;}return NULL;
}
//解决方法
int main()
{char str[30] = "Elon Musk&Telsa:SpaceX@C++";char* sep = "&:@";for (char* ret = strtok(str, sep); ret != NULL; ret = strtok(NULL, sep)){printf("%s\n", ret);}return 0;
}
  1. strtok函数,改变被操作的字符串,strtok,切分,临时拷贝的备份。

//解决方法
#include <ctype.h>
#define PASSWORD_MAX 30
int JudgePassword(const char* password)
{int flag1 = 0;int flag2 = 0;int flag3 = 0;int sz = strlen(password);if (sz >= 30 || strstr(password, "ElonMusk") != NULL)return 0;int i = 0;for (i = 0; i < sz; i++){if (islower(password[i]))flag1++;else if (isupper(password[i]))flag2++;else if (isdigit(password[i]))flag3++;if (flag1 >= 3 && flag2 >= 2 && flag3 >= 3)return 1;}return 0;
}
int main()
{printf("请输入密码:");char password[PASSWORD_MAX] = { 0 };while (gets(password) != EOF){if (JudgePassword(password)){printf("密码已经设置成功!\n");break;}printf("不符合规定,重新设置:");}return 0;
}
//解决方法
#include <ctype.h>
void Change(char* p)
{while (*p){if (islower(*p)){*p = toupper(*p);}p++;}
}
int main()
{char arr[50] = "Elon Musk Is A Great Successful Person ! ";int i = 0;while (*(arr + i)){if (*(arr + i) == 'I')*(arr + i) = 'i';if (*(arr + i) == 'A'){Change(arr + i);break;}i++;}printf("%s\n", arr);return 0;
}
void* my_memcpy(void* dest, const void* src, size_t num)
{assert(dest && src);void* ret = dest;int i = 0;for (i = 0; i < num; i++){*((char*)dest) = *((char*)src);((char*)src)++;((char*)dest)++;}return ret;
}
//解决方法
void* my_memmove(void* dest, const void* src, size_t num)
{assert(dest && src);void* ret = dest;if (src < dest){while (num--){*((char*)dest + num) = *((char*)src + num);}}else{while (num--){*((char*)dest) = *((char*)src);src = (char*)src + 1;dest = (char*)dest + 1;}}return ret;
}
struct Stu
{char name[10];int age;float score;
}s1;
int main()
{struct Stu* ps1 = &s1;memset(&(ps1->name), '*', sizeof(ps1->name));memset(&(ps1->age), 0, sizeof(ps1->age));memset(&(ps1->score), 0, sizeof(ps1->score));printf("%s %d %.2lf", s1.name, s1.age, s1.score);return 0;
}

相关文章:

(C语言)常见的字符串与内存操作函数

问&#xff1a;1. Solve the problems&#xff1a;我想用三种方法求字符串的长度怎么办&#xff1f;2. strlen处理的字符串中有什么时需要注意&#xff1a;什么只记为什么&#xff1f;当什么不起什么作用时&#xff0c;什么不计算在内&#xff0c;编译器会把什么&#xff0c;什…...

Linux基础笔记总结

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…...

R语言学习笔记

1.R语言介绍 2.R语言安装 官网&#xff1a;https://www.r-project.org/ CARN → 选择China中任意镜像站点 → Download R for Windows → base&#xff08;二进制版本R基础软件&#xff09;→ Download R-4.2.2 for Windows (76 megabytes, 64 bit) 3.Rstudio安装 https://po…...

【软件测试】企业测试面试题9道,从自我介绍到项目考察+回答......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 1、自我介绍 您好&a…...

《Spring源码深度分析》第8章 数据库连接JDBC

目录标题前言一、数据库连接方式1.JDBC连接数据库2.Spring Jdbc连接数据库(JdbcTemplate)二、JdbcTemplate源码分析1.update/save功能的实现源码分析入口(关键)基础方法execute1.获取数据库连接池2.应用用户设定的输入参数3. 调用回调函数处理4. 资源释放Update中的回调函数2.q…...

ModuleNotFoundError的解决方案【已解决】

问题描述 有包却提示ModuleNotFoundError 在正常情况下&#xff0c;你使用pip或者conda检查是否有相应包的时候&#xff0c;显示的是有的。但是一旦运行程序就会报这个ModuleNotFoundError错误。 问题可能是程序运行环境不对。 解决方案 &#xff08;1&#xff09;进入正确…...

Vue驼峰与短横线分割命名中有哪些坑

目录 0.前言 驼峰和短横线分割命名注意事项 组件注册命名 父子组件数据传递时命名 父子组件函数传递 0.前言 Vue驼峰命名法指的是将变量以驼峰形式命名&#xff0c;例如 userName、userId 等&#xff0c;而短横线分隔符法则指的是用短横线分隔变量名&#xff0c;例如 user…...

从文件中加载数据以及异常处理

上期学习了数据的存储&#xff0c;这次学习数据的加载 你可以使用把openpyxl.load_workbook() 来打开一个已经存在的工作簿 >>> from openpyxl import load_workbook >>> wb load_workbook(filename empty_book.xlsx) >>> sheet_ranges wb[ran…...

【JavaSE】方法的使用

方法的使用BIT-5-方法的使用绪论1. 方法概念及使用1.1什么是方法1.2 方法定义1.3 实参和形参的关系&#xff08;重要&#xff09;1.4 没有返回值的方法2. 方法重载2.1 为什么需要方法重载2.2 方法重载概念3. 递归3.1 生活中的故事3.2 递归的概念3.2 递归执行过程分析3.3 递归练…...

ModelScope 垂类检测系列模型介绍

文章目录ModelScope介绍垂类模型介绍调用方式1 Demo Service2 Notebook3 本地使用* 二次开发总结ModelScope介绍 ModelScope 是阿里达摩院推出的 中文版模型即服务&#xff08;MaaS, Model as a Service&#xff09;共享平台。该平台在2022年的云栖大会上发布&#xff0c;之前…...

Linux | Linux卸载和安装MySQL(Ubuntu版)

最近又来到了Linux学习了&#xff0c;原因是要接触云服务器相关知识&#xff0c; 所以博主整理了一些关于Linux的知识&#xff0c; 欢迎各位朋友点赞收藏&#xff0c;天天开心丫&#xff0c;快乐写代码&#xff01; Linux系列文章请戳 Linux教程专栏 目录 一、卸载MySQL 1…...

【C1】数据类型,常量变量,输入输出,运算符,if/switch/循环,/数组,指针,/结构体,文件操作,/编译预处理,gdb,makefile,线程

文章目录1.数据类型&#xff1a;单双引号&#xff0c;char&#xff08;1B&#xff09;&#xff0c;int/float&#xff08;32位系统&#xff0c;大小一样4B&#xff0c;但存储方式不同&#xff09;&#xff0c;double&#xff08;8B&#xff09;&#xff0c;long double&#xf…...

【深度学习】pytorch的基础操作

import torch import numpy as np # 1.1 根据已有的数据创建张量 def test01(): # 1.1 创建标量 data torch.tensor(10) print(data) # 1.2 使用numpy数组来创建张量 data np.random.randn(2,3) data torch.tensor(data) print(data) # 1.3使用list…...

MWORKS--同元软控MWORKS介绍、安装与使用

MWORKS--同元软控MWORKS介绍、安装与使用1 同元软控介绍1.1 同元软控简介1.2 同元软控发展历史2 MWORKS介绍2.1 MWORKS简介2.2 MWORKS产品描述3 装备数字化3.1 发展3.2 内涵3.3 系统模型发展成为产品的一部分3.4 MWORKS系统模型数据管理3.4 MWORKS为装备数字化提供的套件4 下载…...

Python 解决dilb和face_recognition第三方包安装失败

目录 dilb和face_recognition第三方包安装失败 亲测有效的解决方法&#xff1a;whl安装方式 dilb和face_recognition第三方包安装失败 场景复现&#xff1a;因为需要用到dlibface_recognition&#xff0c;基于OpenCV做一些人脸识别的项目&#xff0c;在Pycharm中进行pip清华…...

Mac系统Mysql的8.0.22版本安装笔记和密码重置修改密码等问题方法

忘记密码官网教程地址&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html 5.7数据库安装指南参考&#xff1a;https://jingyan.baidu.com/article/fa4125ac0e3c2928ac709204.html 初次安装8.0.22遇到许多坑&#xff0c;密码修改失败&#xff1b…...

驱动 | Linux | NVMe 不完全总结

本文主要参考这里 1’ 2 的解析和 linux 源码 3。 此处推荐一个可以便捷查看 linux 源码的网站 bootlin 4。 更新&#xff1a;2022 / 02 / 11 驱动 | Linux | NVMe 不完全总结NVMe 的前世今生从系统角度看 NVMe 驱动NVMe CommandPCI 总线从架构角度看 NVMe 驱动NVMe 驱动的文件…...

一个测试人员,在现阶段的环境下如何在测试行业发展和自我价值。

前言周末和几个测试圈子里的大佬饭局上聊了一些职场和测试职业发展相关的话题&#xff0c;我将聊天的内容做了整理和阐述。。朋友圈有测试同学对这篇文章提了比较深刻的建议&#xff0c;下面是他的评价和建议&#xff1a;评价&#xff1a;据说是大佬饭桌总结&#xff0c;有两点…...

pwn手记录题2

fastbin_reverse_into_tcache(2.34) 本题所使用的libc版本为2.34&#xff1b;&#xff08;最新版 libc2.34版本已经没有了所谓的hook函数&#xff0c;甚至exit_hook(实际为某个函数指针)也已经不能够使用&#xff1b;能够利用的手法已经很少了&#xff1b; 高版本glibc堆的几…...

CSS ~ 从入门到入坑。

CSS ~ 从入门到入坑。 文章目录CSS ~ 从入门到入坑。what。css 三种实现方式。选择器。id 选择器 > class 选择器 > 标签选择器。标签选择器。类选择器。id 选择器。层次选择器。后代选择器。子选择器。相邻兄弟选择器。通用选择器。结构伪类选择器。属性选择器。字体风格…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...