(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 选择器。层次选择器。后代选择器。子选择器。相邻兄弟选择器。通用选择器。结构伪类选择器。属性选择器。字体风格…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
