STLG_01_10_程序设计C语言 - 字符串

在C语言中,字符串是非常重要的数据类型,它们用于存储和操作文本数据。由于C语言没有内置的字符串类型,因此字符串是通过字符数组来实现的。

1. 字符串的基本概念

  • 字符数组:C语言中的字符串实际上是一个字符数组,字符数组的最后一个元素必须是空字符('\0'),它表示字符串的结束。

    char str[] = "Hello, World!";
    

    在这个例子中,str是一个字符数组,存储了字符串"Hello, World!"。C语言会在字符串末尾自动添加一个'\0'

  • 字符指针:字符串也可以用字符指针来表示,指向字符串常量的首地址。

    char *str = "Hello, World!";
    

    与字符数组不同,这里str是一个指向字符串常量的指针,这个字符串常量是不可修改的。

2. 字符串的输入输出

  • printf():用于格式化输出字符串。

    printf("%s\n", str);
    
  • scanf():用于从标准输入读取字符串。

    char str[100];
    scanf("%s", str);  // 读取字符串到str
    

    注意scanf()读取字符串时,遇到空格或换行符会停止读取,因此它不能读取带有空格的字符串。可以使用gets()fgets()来读取包含空格的字符串。

  • gets()(已废弃,不推荐使用):用于读取包含空格的字符串。

    char str[100];
    gets(str);  // 读取字符串到str
    

    警告gets()函数不安全,因为它不检查数组边界,容易导致缓冲区溢出。建议使用fgets()

  • fgets():安全的字符串输入函数。

    char str[100];
    fgets(str, sizeof(str), stdin);  // 从标准输入读取字符串到str
    

3. 字符串处理函数

C语言提供了许多字符串处理函数,这些函数定义在<string.h>头文件中。

  • strlen():返回字符串的长度(不包括'\0')。

    size_t len = strlen(str);  // 返回字符串的长度
    
  • strcpy():字符串复制。

    char src[] = "Hello";
    char dest[10];
    strcpy(dest, src);  // 将src复制到dest
    
  • strcat():字符串连接。

    char s1[50] = "Hello, ";
    char s2[] = "World!";
    strcat(s1, s2);  // s1变为"Hello, World!"
    
  • strcmp():字符串比较。

    int result = strcmp("apple", "banana");
    if (result < 0) {printf("apple小于banana\n");
    } else if (result > 0) {printf("apple大于banana\n");
    } else {printf("apple等于banana\n");
    }
    
  • strchr():查找字符串中首次出现的指定字符。

    char *p = strchr("Hello, World!", 'o');
    if (p) {printf("字符 'o' 在位置 %ld 处找到\n", p - "Hello, World!");
    }
    
  • strstr():查找字符串中首次出现的子字符串。

    char *p = strstr("Hello, World!", "World");
    if (p) {printf("子字符串 'World' 在位置 %ld 处找到\n", p - "Hello, World!");
    }
    

4. 常见问题与注意事项

  • 数组越界:在操作字符串时,必须确保目标数组有足够的空间来存储结果,否则会导致数组越界,引发未定义行为。

  • 字符串结束符'\0':手动操作字符串时,务必确保字符串以'\0'结束,否则会导致程序行为异常。

  • 字符串常量:字符串常量存储在只读存储区,不能修改。例如:

    char *str = "Hello, World!";
    *str = 'h';  // 错误:不能修改字符串常量
    

5. 字符串操作示例

下面是一个简单的示例,展示如何使用上述函数处理字符串:

#include <stdio.h>
#include <string.h>int main() {char str1[50] = "Hello, ";char str2[] = "World!";char str3[50];// 复制字符串strcpy(str3, str1);printf("str3: %s\n", str3);// 连接字符串strcat(str1, str2);printf("str1: %s\n", str1);// 获取字符串长度size_t len = strlen(str1);printf("Length of str1: %zu\n", len);// 比较字符串int result = strcmp(str1, str2);if (result < 0) {printf("str1 is less than str2\n");} else if (result > 0) {printf("str1 is greater than str2\n");} else {printf("str1 is equal to str2\n");}// 查找字符char *p = strchr(str1, 'o');if (p) {printf("'o' found at position: %ld\n", p - str1);}// 查找子字符串char *sub = strstr(str1, "World");if (sub) {printf("Substring 'World' found at position: %ld\n", sub - str1);}return 0;
}

总结

C语言中的字符串是通过字符数组来实现的,字符串以'\0'结束。C语言提供了一系列的字符串处理函数,如strlen()strcpy()strcat()strcmp()等。在使用这些函数时,务必注意字符串的边界问题和结束符'\0'的处理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在大型语言模型LLM中使用私有数据

目录 一、说明 二、训练&#xff1f; 三、及时工程 四、构建系统提示 五、数据人性化 六、我的数据安全吗&#xff1f; 一、说明 随着 2023 年大型语言模型的大规模兴起&#xff0c;许多“基于对话”的服务应运而生&#xff0c;使用户能够通过自然对话与数据和其他产品进行交互…

字玩FontPlayer开发笔记6 Tauri2设置菜单

字玩FontPlayer开发笔记6 Tauri2设置菜单 字玩FontPlayer是笔者开源的一款字体设计工具&#xff0c;使用Vue3 ElementUI开发&#xff0c;源代码&#xff1a; github: https://github.com/HiToysMaker/fontplayer gitee: https://gitee.com/toysmaker/fontplayer 笔记 字玩目…

Chapter4.1 Coding an LLM architecture

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture 4 Implementing a GPT model from Scratch To Generate Text 本章节包含 编写一个类似于GPT的大型语言模型&#xff08;LLM&#xff09;&#xff0c;这个模型可以被训练来生…

linux-centos-安装miniconda3

参考&#xff1a; 最新保姆级Linux下安装与使用conda&#xff1a;从下载配置到使用全流程_linux conda-CSDN博客 https://blog.csdn.net/qq_51566832/article/details/144113661 Linux上删除Anaconda或Miniconda的步骤_linux 删除anaconda-CSDN博客 https://blog.csdn.net/m0_…

Speech Recognition vs. Voice Recognition | 语音识别工作原理 | 模型训练 | 应用

注&#xff1a;机翻&#xff0c;未校。 Speech Recognition 与 Voice Recognition 剑桥词典 speech recognition&#xff0c;语音识别 voice recognition&#xff0c;声音识别 Speech vs. Voice - What’s the Difference? | This vs. That https://thisvsthat.io/speech-vs…

外网访问本地部署的 VMware ESXi 服务

本文将详细的介绍如何在本地部署的 VMware ESXi 以及结合路由侠内网穿透技术&#xff0c;实现外网远程访问和管理本地 ESXi 服务器的具体步骤和配置方法。 第一步&#xff0c;本地部署 VMware ESXi 1&#xff0c;先去官网下载 ESXI &#xff1a;网址&#xff1a;Home - Suppor…

如何配置【Docker镜像】加速器+【Docker镜像】的使用

一、配置Docker镜像加速器 1. 安装/升级容器引擎客户端​ 推荐安装1.11.2以上版本的容器引擎客户端 2. 配置镜像加速器​ 针对容器引擎客户端版本大于1.11.2的用户 以root用户登录容器引擎所在的虚拟机 修改 "/etc/docker/daemon.json" 文件&#xff08;如果没有…

基于Spring Boot的车辆违章信息管理系统(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

如何提高软件研发效率?

如何提高软件研发效率&#xff1f; 概述 莫等闲&#xff0c;白了少年头&#xff0c;空悲切。近些年来在大家眼里形成了“卷王”的印象&#xff0c;第一次听到这一的评价感觉有点不好意思&#xff0c;之后回想感觉挺自豪的&#xff0c;说明现在的我没有浪费光阴&#xff0c;我一…

jenkins入门--安装jenkins

下载地址https://www.jenkins.io/ jdk 安装 &#xff1a;Jenkins需要安装对应版本的jdk,我在安装过程中显示需要21,17 Java Downloads | Oracle jenkins安装过程参考全网最清晰Jenkins安装教程-windows_windows安装jenkins-CSDN博客 安装完成后&#xff0c;浏览器输入127.0.…

单片机-独立按键矩阵按键实验

1、按键介绍 按键管脚两端距离长的表示默认是导通状态&#xff0c;距离短的默认是断开状态&#xff0c; 如果按键按下&#xff0c;初始导通状态变为断开&#xff0c;初始断开状态变为导通 我们开发板是采用软件消抖&#xff0c;一般来说一个简单的按键消抖就是先读取按键的状…

一文详解YOLOv8多模态目标检测(可见光+红外图像,基于Ultralytics官方代码实现),轻松入门多模态检测领域!

目录 1. 文章主要内容2. 相关说明3. 基于YOLOv8的多模态目标检测3.1 启动运行YOLOv8多模态代码3.2 详解代码流程&#xff08;重点&#xff09;3.2.1 train.py文件&#xff08;入口&#xff09;3.2.2 engine\model.py文件3.2.3 engine\trainer.py文件3.2.4 models\yolo\detect\t…

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现

目录 1 三种多头编码&#xff08;MHE&#xff09;实现1.1 多头乘积&#xff08;MHP&#xff09;1.2 多头级联&#xff08;MHC&#xff09;1.3 多头采样&#xff08;MHS&#xff09;1.4 标签分解策略 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者…

【AWS SDK PHP】This operation requests `sigv4a` auth schemes 问题处理

使用AWS SDK碰到的错误&#xff0c;其实很简单&#xff0c;要装个扩展库 保持如下 Fatal error: Uncaught Aws\Auth\Exception\UnresolvedAuthSchemeException: This operation requests sigv4a auth schemes, but the client currently supports sigv4, none, bearer, sigv4-…

LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144881432 大模型的 HTTP 服务,通过网络接口,提供 AI 模型功能的服务,允许通过发送 HTTP 请求,交互大模型,通常基于云计算架构,无需在本地部署复杂的模型和硬件,…

【MATLAB】【Simulink仿真】向模型中添加自定义子系统

一、子系统的创建 1、启动Simulink&#xff0c;选择【新建】——【空白子系统】——【创建子系统】 2、选择【浏览组件库】&#xff0c;创建使能子系统。 3、保存至当前工作目录。 二、建立模型仿真 1、启动Simulink&#xff0c;选择【新建】——【空白子系统】——【创建子系…

HTML——56.表单发送

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表单发送</title></head><body><!--注意&#xff1a;1.表单接收程序&#xff0c;放在服务器环境中(也就是这里的www文件目录中)2.表单发送地址&#x…

123.【C语言】数据结构之快速排序挖坑法和前后指针法

目录 1.挖坑法 执行流程 代码 运行结果 可读性好的代码 2.前后指针法(双指针法) 执行流程 单趟排序代码 将单趟排序代码改造后 写法1 简洁的写法 3.思考题 1.挖坑法 执行流程 "挖坑法"顾名思义:要有坑位,一开始将关键值放入临时变量key中,在数组中形成…

重庆大学软件工程复试怎么准备?

重大软件复试相对来说不算刁钻&#xff0c;关键是对自己的竞赛和项目足够了解&#xff0c;能应对老师的提问。专业课范围广&#xff0c;英文文献看个人水平&#xff0c;难度不算大&#xff0c;整体只要表现得得体从容&#xff0c;以及充分的准备&#xff0c;老师不会为难你。 …

【Rust自学】10.3. trait Pt.1:trait的定义、约束与实现

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 题外话&#xff1a;trait的概念非常非常非常重要&#xff01;&#xff01;&#xff01;整个第10章全都是Rust的重难点&#xff01;&#x…