12、字符串
1、字符串概念
字符串用来存储一组字符,因此需要字符数组来存。
C语言中字符串的表示
C语言里面字符串只能用字符数组来存
字符串要求这个数组的末尾必须至少有一个\0
char ch1[] = {'a','b','c'}; // 不是字符串
char ch2[5] = {'h','e','l','l','o'}; // 不是字符串
char ch2[6] = {'h','e','l','l','o'}; // {'h','e','l','l','o','\0'} 字符串
char ch2[10] = {'h','e','l','l','o'}; // {'h','e','l','l','o','\0','\0','\0','\0','\0'} 字符串
简化成""的形式
char ch2[] = "hello"; // {'h','e','l','l','o','\0'}
例:
char ch2[10] = {'h','e','l','l','o'};
sizeof(ch2)=___10____ (sizeof求空间所占字节数)
char ch3[] = "hello";
sizeof(ch3)=____6_____ (sizeof求空间所占字节数)
2、字符串专门格式控制符%s
输入 -- 一串字符 --- %s需要字符串的某个字符地址,从给定的地址开始接收一个字符放到char型空间去,直到遇到空格 或者 回车 结束
输出 -- 一串字符 --- %s需要字符串的某个字符地址,从给定的地址开始读一个char字符输出,读一个输出,读到\0
char str[20];printf("请输入一个字符串:");scanf("%s",str); // scanf("%s",&str[0]);printf("输入的字符串是:%s\n",str);
3、多个字符串存储
存储一个同学的姓名
一个字符串 --- 一维数组既可以了 char name[20];
存储一个班级同学的姓名,加入班级有5为同学:
5个字符串 --- 二维数组 char names[5][20];
例:
char names[5][20] = {"lili","tom","xiaoming","xiaoli","xiaomei"};int i;
for(i=0;i<5;i++)
{printf("%s\n",names[i]);
}
4、字符串处理函数
因为字符串需要使用数组存储,所以字符串名称是一个数组名,不能直接进行比较或者 复制操作,因此C语言为了方便我们操作,在string.h头文件里面提供了很多常用的字符串处理函数,帮助我们快速实现字符串的相关操作,具体可以参考:C/C++函数大全。
库函数学习重点关注:
函数功能是什么
功能怎么用
思考:函数如何完成这个功能
4.1、strlen
功能:求字符串长度,不包含'\0'
语法:
#include <string.h>
size_t strlen( char *str );
使用:
#include<stdio.h>
#include<string.h>int main(void)
{char str[20];printf("请输入字符串:");scanf("%s",str);int len;len = strlen(str);printf("%d\n",len);int len1;len1 = strlen(&str[2]);printf("%d\n",len1);return 0;
}
sizeof : 任意空间所占字节数
strlen :字符串 -- 从给定的地址计数知道遇到\0 --- 统计这个过程中字符的个数
实现思路:
从给定的地址开始查找,找到一个非\0字符就技术,直到遇到\0字符结束计数,并把技术结果返回。
4.2、strcat
功能:字符串拼接
语法:
#include <string.h>
char *strcat( char *str1, const char *str2 );
使用:
char s1[30] = "hello";
char s2[10] = "world";// 想把s2拼接到s1的后面
strcat(s1,s2); printf("%s",s1);
实现思路:
先找到第一个字符串末尾 \0
依次将第二个字符串的字符拷贝到第一个字符串的位置
拷贝结束补\0
4.3、strcpy
功能:拷贝字符串
语法:
#include <string.h>
char *strcpy( char *str1, const char *str2 );
使用:
#include<stdio.h>
#include<string.h>int main(void)
{char s1[10] = "hello"; char s2[10] = "hihihhi";strcpy(s2,s1);printf("%s",s2);printf("%c",s2[6]);return 0;
}
实现思路:
依次将第二个字符串的字符拷贝到第一个字符串str1指向的位置
拷贝结束补\0
4.4、strcmp
功能:比较字符串大小
语法:
#include <string.h>
int strcmp( const char *str1, const char *str2 );
使用:
#include<stdio.h>
#include<string.h>int main(void)
{char pwd[20];printf("请输入密码:");scanf("%s",pwd);int res;res = strcmp(pwd,"123456");if(res == 0){printf("登录成功");}else{printf("登录失败");}return 0;
}
实现思路:
长度一样,对应下标上的字符也要一样,两个字符串相等,返回0,否则就是不相等。
找到两个字符串的对应位置,0下标和0下标比较,1下标和1下标比较,知道遇到不一样的返回非,如果对比了所有都一样,一起遇到\0就代表字符出啊你一样,返回0。
相关文章:
12、字符串
1、字符串概念 字符串用来存储一组字符,因此需要字符数组来存。 C语言中字符串的表示 C语言里面字符串只能用字符数组来存 字符串要求这个数组的末尾必须至少有一个\0 char ch1[] {a,b,c}; // 不是字符串 char ch2[5] {h,e,l,l,o}; // 不是字符串 char…...

DPDK用户态协议栈-Tcp Posix API 1
和udp一样,我们需要实现和系统调用一样的接口来实现我们的tcp server。先来看看我们之前写的unix_tcp使用了哪些接口,这边我加上两个系统调用,分别是接收数据和发送数据。 #include <stdio.h> #include <arpa/inet.h> #include …...

【人工智能-科普】图神经网络(GNN):与传统神经网络的区别与优势
文章目录 图神经网络(GNN):与传统神经网络的区别与优势什么是图神经网络?图的基本概念GNN的工作原理GNN与传统神经网络的不同1. 数据结构的不同2. 信息传递方式的不同3. 模型的可扩展性4. 局部与全局信息的结合GNN的应用领域总结图神经网络(GNN):与传统神经网络的区别与…...
LabVIEW实现UDP通信
目录 1、UDP通信原理 2、硬件环境部署 3、云端环境部署 4、UDP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利…...

[pdf,epub]228页《分析模式》漫谈合集01-45提供下载
《分析模式》漫谈合集01-45的pdf、epub文件提供下载。已上传至本号的CSDN资源。 如果CSDN资源下载有问题,可到umlchina.com/url/ap.html。 已排版成适合手机阅读,pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》? ★[缝合故事]…...

Kafka的消费消息是如何传递的?
大家好,我是锋哥。今天分享关于【Kafka的消费消息是如何传递的?】面试题。希望对大家有帮助; Kafka的消费消息是如何传递的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中,消息的消费是通过消费…...
二分查找(Java实现)(1)
二分查找(Java实现)(1) leetcode 34.排序数组中查找元素第一个和最后一个位置 题目描述: 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如…...

力扣103.二叉树的锯齿形层序遍历
题目描述 题目链接103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1ÿ…...

Search with Orama
1.前言 在不久之前,我把 DevNow 的搜索组件通过 Lunr 进行了重构,从前端角度实现了对文章内容的搜索,但是在使用体验上,感觉不是特别好,大概有如下几个原因: 社区的文章数量比较少,项目的 Com…...

一万台服务器用saltstack还是ansible?
一万台服务器用saltstack还是ansible? 选择使用 SaltStack 还是 Ansible 来管理一万台服务器,取决于几个关键因素,如性能、扩展性、易用性、配置管理需求和团队的熟悉度。以下是两者的对比分析,帮助你做出决策: SaltStack&…...
计算机类大厂实习春招秋招开发算法面试问答练习题
计算机类大厂实习春招秋招开发算法面试问答练习题 下面有十个非常重要且常问,面试者却注意不到的问题,我们一个个来看,一个个来学。 线程创建到删除过程中,底层是怎么实现的 1.线程创建 线程创建是线程生命周期的起点。在操作系统中,线程可以通过多种方式创建,但无论哪…...

【热门主题】000068 筑牢网络安全防线:守护数字世界的坚实堡垒
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…...

RPC与HTTP调用模式的架构差异
RPC(Remote Procedure Call,远程过程调用)和 HTTP 调用是两种常见的通信模式,它们在架构上有以下一些主要差异: 协议层面 RPC:通常使用自定义的二进制协议,对数据进行高效的序列化和反序列化&am…...

计算机网络之传输层协议UDP
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之传输层协议UDP 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目…...
Uniapp 微信小程序内打开web网页
技术栈:Uniapp Vue3 简介 实际业务中有时候会需要在本微信小程序内打开web页面,这时候可以封装一个路由页面专门用于此场景。 在路由跳转的时候携带路由参数,拼接上web url,接收页面进行参数接收即可。 实现 webview页面 新…...

阅读方法论
选择固有缺陷,选项是对比出来的...
373. 查找和最小的 K 对数字
参考的这个博客: https://zhuanlan.zhihu.com/p/457239781 然后看这个代码我想到了另外一种方法,就是一步一步往里加元组 ( i , j ) (i,j) (i,j),看代码就知道了,不过需要做一步去重,去重不能用 i n t [ ] int[] int…...

常用函数的使用错题汇总
目录 new/delete malloc/free1. 语言和类型2. 内存分配3. 内存释放4. 安全性和类型安全5. 其他特性总结 线程停止文件流 new/delete malloc/free malloc/free 和 new/delete 是 C/C 中用于动态内存管理的两种方式,它们有一些重要的区别。以下是这两种方式的比较&…...
uniapp手机端一些坑记录
关于 z-paging-x 组件,在ios上有时候通过弹窗去粗发它reload时会触发闪退,可能是弹框插入进去导致的DOM 元素已经被移除或者不可用,解决办法是加上他自带属性 :showRefresherWhenReload"true" 加上showRefresherWhe…...

2024学习之前端微信小程序开发教程,从入门到精通-含基础+实战+源码code
目录 一、简单介绍 二、课程需知 三、内容编排 1、小程序基础 起步式 目录结构 小程序框架 场景值 逻辑层 视图层 组件 视图容器 基础内容 表单组件 导航 媒体组件 Api 路由 界面 交互 网络 数据缓存 自定义组件 2、项目实战 …...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...