(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 选择器。层次选择器。后代选择器。子选择器。相邻兄弟选择器。通用选择器。结构伪类选择器。属性选择器。字体风格…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
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…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
