(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 选择器。层次选择器。后代选择器。子选择器。相邻兄弟选择器。通用选择器。结构伪类选择器。属性选择器。字体风格…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...