(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;
}转义字符,转义字符整体,一个字符,\,转义,\本身,\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;
}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语言)常见的字符串与内存操作函数
问:1. Solve the problems:我想用三种方法求字符串的长度怎么办?2. strlen处理的字符串中有什么时需要注意:什么只记为什么?当什么不起什么作用时,什么不计算在内,编译器会把什么,什…...
Linux基础笔记总结
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
R语言学习笔记
1.R语言介绍 2.R语言安装 官网:https://www.r-project.org/ CARN → 选择China中任意镜像站点 → Download R for Windows → base(二进制版本R基础软件)→ Download R-4.2.2 for Windows (76 megabytes, 64 bit) 3.Rstudio安装 https://po…...
【软件测试】企业测试面试题9道,从自我介绍到项目考察+回答......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 1、自我介绍 您好&a…...
《Spring源码深度分析》第8章 数据库连接JDBC
目录标题前言一、数据库连接方式1.JDBC连接数据库2.Spring Jdbc连接数据库(JdbcTemplate)二、JdbcTemplate源码分析1.update/save功能的实现源码分析入口(关键)基础方法execute1.获取数据库连接池2.应用用户设定的输入参数3. 调用回调函数处理4. 资源释放Update中的回调函数2.q…...
ModuleNotFoundError的解决方案【已解决】
问题描述 有包却提示ModuleNotFoundError 在正常情况下,你使用pip或者conda检查是否有相应包的时候,显示的是有的。但是一旦运行程序就会报这个ModuleNotFoundError错误。 问题可能是程序运行环境不对。 解决方案 (1)进入正确…...
Vue驼峰与短横线分割命名中有哪些坑
目录 0.前言 驼峰和短横线分割命名注意事项 组件注册命名 父子组件数据传递时命名 父子组件函数传递 0.前言 Vue驼峰命名法指的是将变量以驼峰形式命名,例如 userName、userId 等,而短横线分隔符法则指的是用短横线分隔变量名,例如 user…...
从文件中加载数据以及异常处理
上期学习了数据的存储,这次学习数据的加载 你可以使用把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 实参和形参的关系(重要)1.4 没有返回值的方法2. 方法重载2.1 为什么需要方法重载2.2 方法重载概念3. 递归3.1 生活中的故事3.2 递归的概念3.2 递归执行过程分析3.3 递归练…...
ModelScope 垂类检测系列模型介绍
文章目录ModelScope介绍垂类模型介绍调用方式1 Demo Service2 Notebook3 本地使用* 二次开发总结ModelScope介绍 ModelScope 是阿里达摩院推出的 中文版模型即服务(MaaS, Model as a Service)共享平台。该平台在2022年的云栖大会上发布,之前…...
Linux | Linux卸载和安装MySQL(Ubuntu版)
最近又来到了Linux学习了,原因是要接触云服务器相关知识, 所以博主整理了一些关于Linux的知识, 欢迎各位朋友点赞收藏,天天开心丫,快乐写代码! Linux系列文章请戳 Linux教程专栏 目录 一、卸载MySQL 1…...
【C1】数据类型,常量变量,输入输出,运算符,if/switch/循环,/数组,指针,/结构体,文件操作,/编译预处理,gdb,makefile,线程
文章目录1.数据类型:单双引号,char(1B),int/float(32位系统,大小一样4B,但存储方式不同),double(8B),long double…...
【深度学习】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第三方包安装失败 亲测有效的解决方法:whl安装方式 dilb和face_recognition第三方包安装失败 场景复现:因为需要用到dlibface_recognition,基于OpenCV做一些人脸识别的项目,在Pycharm中进行pip清华…...
Mac系统Mysql的8.0.22版本安装笔记和密码重置修改密码等问题方法
忘记密码官网教程地址:https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html 5.7数据库安装指南参考:https://jingyan.baidu.com/article/fa4125ac0e3c2928ac709204.html 初次安装8.0.22遇到许多坑,密码修改失败;…...
驱动 | Linux | NVMe 不完全总结
本文主要参考这里 1’ 2 的解析和 linux 源码 3。 此处推荐一个可以便捷查看 linux 源码的网站 bootlin 4。 更新:2022 / 02 / 11 驱动 | Linux | NVMe 不完全总结NVMe 的前世今生从系统角度看 NVMe 驱动NVMe CommandPCI 总线从架构角度看 NVMe 驱动NVMe 驱动的文件…...
一个测试人员,在现阶段的环境下如何在测试行业发展和自我价值。
前言周末和几个测试圈子里的大佬饭局上聊了一些职场和测试职业发展相关的话题,我将聊天的内容做了整理和阐述。。朋友圈有测试同学对这篇文章提了比较深刻的建议,下面是他的评价和建议:评价:据说是大佬饭桌总结,有两点…...
pwn手记录题2
fastbin_reverse_into_tcache(2.34) 本题所使用的libc版本为2.34;(最新版 libc2.34版本已经没有了所谓的hook函数,甚至exit_hook(实际为某个函数指针)也已经不能够使用;能够利用的手法已经很少了; 高版本glibc堆的几…...
CSS ~ 从入门到入坑。
CSS ~ 从入门到入坑。 文章目录CSS ~ 从入门到入坑。what。css 三种实现方式。选择器。id 选择器 > class 选择器 > 标签选择器。标签选择器。类选择器。id 选择器。层次选择器。后代选择器。子选择器。相邻兄弟选择器。通用选择器。结构伪类选择器。属性选择器。字体风格…...
浪潮服务器硬盘红灯报警?手把手教你更换RAID阵列故障盘(附同步失败解决方案)
浪潮服务器硬盘红灯报警全流程处置指南:从故障诊断到阵列重建 当浪潮服务器的硬盘指示灯突然亮起刺眼的红色,大多数运维人员的第一反应往往是心头一紧。这种视觉警报不仅意味着硬件故障,更可能预示着数据丢失的风险。不同于普通PC的硬盘故障…...
脑皮层房地产:公司在我的神经突触建数据中心
在数字时代的浪潮中,一个颠覆性的概念正在兴起:企业将数据中心直接构建于人类神经突触之上,仿佛一场“脑皮层房地产”的革命。这并非科幻小说的臆想,而是对现代分布式系统和人工智能架构的深刻隐喻。对于软件测试从业者而言&#…...
程序员视角:五笔输入法98版为何更适合代码编写?
程序员视角:五笔输入法98版为何更适合代码编写? 在程序员的世界里,效率就是生命。从IDE的选择到快捷键的配置,每一个细节都可能影响编码的速度和质量。而作为中文开发者,输入法的选择往往被忽视——直到你发现自己在输…...
N_m3u8DL-RE流媒体下载器终极指南:5分钟掌握加密视频下载与直播录制
N_m3u8DL-RE流媒体下载器终极指南:5分钟掌握加密视频下载与直播录制 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器,支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/…...
这次终于选对了!高效论文写作全流程AI论文写作软件推荐(2026 最新)
2026年AI论文写作软件已全面升级,论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节,以下工具按环节精准匹配,兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求ÿ…...
2026电商客服外包TOP5实力品牌详细解读
进入2026年,电商行业已从粗放式扩张转向精细化运营时代,客户服务不再局限于简单的问答回复,而是成为驱动店铺销售增长、积累品牌声誉的关键要素。根据最新行业研究报告,专业的外包客服团队能够帮助店铺将询单转化率提高20%-30%&am…...
开源压枪系统:基于像素识别技术的后坐力补偿解决方案
开源压枪系统:基于像素识别技术的后坐力补偿解决方案 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap/Apex-NoRecoil-202…...
UE5项目GPU瓶颈卡顿?手把手教你用GPU Visualizer揪出渲染性能元凶
UE5项目GPU瓶颈卡顿?手把手教你用GPU Visualizer揪出渲染性能元凶 当你的UE5项目在真机测试时突然掉帧到30fps以下,而编辑器里明明运行流畅——这种"开发环境正常,实机表现崩盘"的困境,相信每个UE开发者都经历过。上周我…...
深度学习赋能国税局发票查验:中英文混合验证码的高效识别方案
1. 验证码识别的税务场景痛点 每次打开国税局网站查验发票时,那个扭曲变形的中英文混合验证码是不是让你特别头疼?作为财务人员,我每天要处理上百张发票,手动输入这些验证码不仅效率低下,还容易出错。传统OCR技术在这里…...
QDKTAI实战面试题50问之31-40
一、Deepseek R1及类似推理模型的应用场景与局限 (一)核心结论 Deepseek R1不适合大部分工程级场景,仅适用于特定创意类或辅助类场景,核心原因是其设计特性与工程落地需求存在冲突。 (二)关键局限&#…...
