【重拾C语言】七、指针(三)指针与字符串(字符串与字符串数组;指针与字符串的遍历、拷贝、比较;反转字符串)

news2024/10/5 2:14:49

目录

前言

七、指针

7.1~3 指针与变量、指针操作、指向指针的指针

7.4 指针与数组

7.5 指针与字符串

7.5.1 字符串与字符串数组

a. 字符串

b. 字符串数组

7.5.2 指针与字符串

a. 字符串指针的声明和初始化

b. 指针与字符串的遍历

c. 字符串的拷贝

d. 字符串的比较

7.5.3 反转字符串


前言​​​​​​​

  • 指针是一个变量,其存储的值是内存地址。通过指针,可以直接访问和操作内存中的数据。指针通常用于在程序中动态地分配内存、传递函数参数、实现数据结构等方面。
  • 字符串是由字符组成的一串数据。在C语言中,字符串以null字符('\0')结尾,表示字符串的结束。字符串可以通过字符数组或指针来表示和操作。使用指针可以更灵活地处理字符串,因为指针可以指向字符串的起始位置,并通过指针运算来访问字符串中的字符。
    • 使用指针来遍历字符串中的字符;
    • 使用指针进行字符串的拷贝、连接和比较等操作;
    • 指针还可以用于动态分配内存以存储字符串,这样可以根据需要调整字符串的长度。

七、指针

7.1~3 指针与变量、指针操作、指向指针的指针

【重拾C语言】七、指针(一)指针与变量、指针操作、指向指针的指针-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133690334?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133690334?spm=1001.2014.3001.5501

7.4 指针与数组

【重拾C语言】七、指针(二)指针与数组(用指针标识数组、多维数组与指针、数组指针与指针数组)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133753904?spm=1001.2014.3001.5501

7.5 指针与字符串

7.5.1 字符串与字符串数组

a. 字符串

        C语言中没有特定的字符串类型,通常是将字符串放在一个字符数组中。字符串实际上是由一系列字符组成的,以空字符('\0')作为结束标志。可以通过声明字符数组来创建字符串,并使用数组中的元素来存储字符串的每个字符。

        创建一个长度为20的字符数组 str,并将字符串 "Hello, world!" 存储在数组中:

char str[20] = "Hello, world!";

        (注意:需要确保数组的长度足够大,以容纳字符串及其结束标志)

  •  字符串:
    • 字符串常量
      • printf(“%d\n”,m); 
        printf(“Hello world”);

    • 字符串变量    
      • char str[10];
        strcpy(str,“hello”); 


     
b. 字符串数组

       使用字符数组的方式来声明和初始化一个字符串数组,其中每个元素都是一个字符串:

char strings[][20] = {
    "Hello",
    "World",
    "C programming"
};

        上述代码中,strings 是一个包含三个字符串的数组。每个字符串可以具有不同的长度(数组的每个元素都需要足够大,以容纳对应的字符串及其结束标志)。

        注意:字符串数组中的每个字符串都以空字符结尾。在使用字符串数组时,需要注意字符串的结束位置

7.5.2 指针与字符串

        通过使用指针,可以更加灵活地操作和处理字符串。指针的优势在于可以直接访问字符串中的字符,而不需要通过数组索引来访问。

a. 字符串指针的声明和初始化
char *strPtr; // 声明一个字符指针
char *strPtr = "Hello"; // 初始化一个指向字符串常量的指针

        可以声明一个字符指针 strPtr,然后将其初始化为指向字符串常量 "Hello" 的起始位置。字符串常量是以字符数组的形式存储的,因此可以使用指针来访问其中的字符。

b. 指针与字符串的遍历

        使用指针可以遍历字符串中的每个字符。

char *strPtr = "Hello";
while (*strPtr != '\0') {
    printf("%c", *strPtr);
    strPtr++; // 指针递增,指向下一个字符
}

        在上述示例中,通过检查指针所指向的字符是否为结束标志 '\0',循环逐个打印字符串中的字符,并通过递增指针来访问下一个字符。

c. 字符串的拷贝
char source[] = "Hello";
char destination[10];
char *srcPtr = source;
char *destPtr = destination;
while (*srcPtr != '\0') {
    *destPtr = *srcPtr;
    srcPtr++;
    destPtr++;
}
*destPtr = '\0'; // 在目标字符串末尾添加结束标志

        通过逐个复制源字符串中的字符到目标字符串,并递增源指针和目标指针,最后在目标字符串末尾添加结束标志 '\0',完成字符串拷贝。

d. 字符串的比较
char *str1 = "Hello";
char *str2 = "Hello";
if (strcmp(str1, str2) == 0) {
    printf("字符串相等\n");
} else {
    printf("字符串不相等\n");
}

       使用 strcmp 函数比较两个字符串是否相等,函数返回值为0表示字符串相等。

7.5.3 反转字符串

#include <stdio.h>
#include <string.h>

void reverseString(char* str) {
    int length = strlen(str);

    // 使用两个指针,一个指向字符串起始位置,一个指向字符串末尾
    char* start = str;
    char* end = str + length - 1;

    // 交换指针所指向的字符,并向中间移动指针,直到两个指针相遇
    while (start < end) {
        char temp = *start;
        *start = *end;
        *end = temp;

        start++;
        end--;
    }
}

int main() {
    char str[] = "Hello, World!";
    printf("原始字符串: %s\n", str);

    reverseString(str);

    printf("反转后的字符串: %s\n", str);

    return 0;
}

​​​​​​​

  • reverseString 函数接受一个指向字符串的指针,并使用两个指针 start 和 end 分别指向字符串的起始位置和末尾位置。通过交换两个指针所指向的字符,并向中间移动指针,可以实现字符串的反转操作。
  • 在 main 函数中,声明一个字符串 str,并将其作为参数传递给 reverseString 函数。然后打印出反转后的字符串。

        关于指针作参数,详见后文:九、再论函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1083970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计选什么题目好?springboot 职业技术学院图书管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

MySQL join的底层原理

文章目录 前言一、join是什么&#xff1f;二、join的使用例子三、join的连接方式1、简单嵌套2、索引嵌套3、块嵌套4、哈希连接 前言 面试的时候&#xff0c;被问到join 的底层原理&#xff0c;之前没有深入了解过&#xff0c;今天对这个知识点进行一个学习。 一、join是什么&…

选择功率放大器时主要看哪些指标

选择功率放大器时&#xff0c;有许多重要的指标需要考虑。以下是选择功率放大器时主要参考的一些指标。 输出功率&#xff1a;输出功率是功率放大器可以提供的最大输出功率。这是选择功率放大器时最基本的指标之一。根据应用的需求&#xff0c;需要确定所需的输出功率水平&…

LLM实战(一)| 使用LLM抽取关键词

抽取关键词是NLP的常见任务之一&#xff0c;常用的方法有TFIDF、PageRank、TextRank方法等等。在Bert时代&#xff0c;可以使用KeyBERT&#xff08;https://github.com/MaartenGr/KeyBERT&#xff09;来抽取关键词&#xff0c;在ChatGPT时代&#xff0c;KeyBERT也扩展支持了LLM…

邮件营销主题怎样撰写效果好

邮件营销主题是向订阅者提供有关公司、产品或服务的新消息和信息。邮件营销主题可以包括促销、折扣、新产品、优惠活动等。邮件营销主题可以吸引订阅者打开邮件&#xff0c;了解公司的新消息&#xff0c;从而增加公司的品牌知名度和销售额。在选择邮件营销主题时&#xff0c;需…

使用大模型提效程序员工作

引言 随着人工智能技术的不断发展&#xff0c;大模型在软件开发中的应用越来越广泛。 这些大模型&#xff0c;如GPT、文心一言、讯飞星火、盘古大模型等&#xff0c;可以帮助程序员提高工作效率&#xff0c;加快开发速度&#xff0c;并提供更好的用户体验。 本文将介绍我在实…

Spring Cloud 2023 支持同步网关,最引人注目的新特性之一

一、前言 在 Spring Cloud 2023 版本中&#xff0c;最引人注目的新特性之一就是支持同步网关。同步网关是一种新的网关实现&#xff0c;它可以保证请求的顺序性。在传统的微服务架构中&#xff0c;不同的服务之间通常通过 HTTP 协议进行通信&#xff0c;这种通信方式是非阻塞的…

【牛客面试必刷TOP101】Day7.BM31 对称的二叉树和BM32 合并二叉树

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

Linux系统之ip命令的基本使用

Linux系统之ip命令的基本使用 一、ip命令介绍1.1 ip命令简介1.2 ip命令的由来1.3 ip命令的安装包 二、ip命令使用帮助2.1 ip命令的help帮助信息2.2 ip命令使用帮助 三、查看网络信息3.1 显示当前网络接口信息3.2 显示网络设备运行状态3.3 显示详细设备信息3.4 查看路由表3.5 查…

DHT11 数字湿温度传感器的原理和应用范例

目录 概述 1、应用电路连接说明 2、DHT11 数据结构 3、DHT11的传输时序 3.1 DHT11 开始发送数据流程 3.2 主机复位信号和 DHT11 响应信号 3.3 数字‘0’信号表示方法 3.4 数字‘1’信号表示方法 4、实例应用 4.1 硬件描述 4.2 管脚分配 4.3 程序代码 概述 DHT…

@所有燃气企业,城燃企业数字化转型重点抓住的八个关键点

关键词&#xff1a;智慧燃气、燃气数字化、设备设施数字化 数字化转型是用信息技术全面重塑企业经营管理模式&#xff0c;是企业发展模式的变革创新&#xff0c;是企业从工业经济时代迈向数字经济时代的必然选择。加快推进企业数字化转型&#xff0c;打造数字时代企业业务运行…

2023年中国超导磁体市场规模、需求量及行业竞争现状分析[图]

超导磁体一般是指用超导导线绕制的能产生强磁场的超导线圈&#xff0c;还包括其运行所必要的低温恒温容器。通常电磁铁是利用在导体中通过电流产生磁场&#xff0c;由于超导材料在超导状态下具有零电阻特性&#xff0c;因此可以以极小的面积通过巨大的电流。超导磁体具有场强高…

意大利航天飞行器公司【Sidereus】完成510万欧元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;位于意大利萨莱诺的航天飞行器公司Sidereus Space Dynamics今日宣布已完成510万欧元融资。 本轮融资由Primo Space和CDP Venture Capital Sgr领投&#xff0c;通过Italia Venture II - Fondo Impr…

element picker 时间控件,指定区间和指定月份置灰

直接上代码 <el-date-pickerv-model"fillingList.declareDate"type"month":disabled"isDisplayName"placeholder"选择填报时间"value-format"yyyy-MM":picker-options"pickerOptions"change"declareDate…

玩转ChatGPT:图像识别(vol. 1)

一、写在前面 来了来了&#xff0c;终于给我的账号开放图像识别功能了&#xff0c;话不多说&#xff0c;直接开测&#xff01;&#xff01;&#xff01; 二、开始尝鲜 &#xff08;1&#xff09;咒语&#xff1a; GPT回复&#xff1a; 这幅图显示了从2005年1月到2012年12月的…

uniapp app获取keystore等一系列常用数据

https://blog.csdn.net/deepdfhy/article/details/88698492 参考文章 一、获取安卓证书keystore的SHA1和SHA256值 参数上面引用链接 window r : $ cmd $ D: 进入D盘 $ keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore 项目名称.ke…

uniapp app端使用谷歌地图选点定位

国内需要vpn 和申请谷歌地图的Maps JavaScript API 类型的 key,指引链接这里不详细介绍 一 、我们得通过webview 跳转谷歌地图 ,需要创建一个webview页面,里面跳转承载谷歌地图的html页面,如果是放在本地的话 html文件须遵守规范 放在 “项目根目录下->hybrid->html->…

Spring三级缓存流程再梳理

本文主要是说下在使用spring时遇到了循环依赖&#xff0c;Spring利用三级缓存怎么解决 getBean(beanName)doGetBean(name, null, null, false);getSingleton(beanName)方法&#xff0c; 最后会通过addSingleton(beanName, singletonObject)存到一级缓存里面去createBean(beanN…

如何进行pyhon的虚拟环境创建及管理

无论服务器或者本地&#xff0c;创建虚拟环境都是&#xff1a; 【Python】搭建虚拟环境_python创建虚拟环境_今天自洽了吗的博客-CSDN博客 虚拟环境绑定到项目 这个是运行环境&#xff0c;可以切换任意运行环境 如果是服务器上&#xff1a;可以先source xx/bin/active&#xf…

颠覆性语音识别:单词级时间戳和说话人分离 | 开源日报 No.53

vbenjs/vue-vben-admin Stars: 19.7k License: MIT Vue Vben Admin 是一个免费开源的中后台模板&#xff0c;使用最新的 vue3、vite4 和 TypeScript 等主流技术进行开发。该项目提供了现成的中后台前端解决方案&#xff0c;并可用于学习参考。 使用先进的前端技术如 Vue3/vit…