当前位置: 首页 > news >正文

C语言字符串学习

在C语言中,字符串(String)是字符数组(character array),并且它以空字符(\0)结束,表示字符串的结尾。我们可以通过一些常见的操作和概念来详细理解它。

1. 字符串的概念

  • 定义:在C语言中,字符串是字符的序列,用双引号""包围。每个字符串以特殊的字符\0(空字符)结尾。

    char str[] = "Hello";  // 实际存储的内容是:['H', 'e', 'l', 'l', 'o', '\0']
    
  • 存储方式:字符串在内存中是连续的字符数组,通过数组下标访问各个字符。

2. 字符串的处理

C语言标准库提供了一些处理字符串的函数,通常位于头文件<string.h>中。常用的有以下几种:

  • strlen():用于计算字符串的长度,不包括\0

    int length = strlen("Hello");  // 返回 5
    
  • strcpy():将一个字符串复制到另一个字符串中。

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

    char str1[20] = "Hello, ";
    char str2[] = "World!";
    strcat(str1, str2);  // str1变成 "Hello, World!"
    

3. 字符串运算

在C语言中,无法直接用算术运算符(如+-)对字符串进行运算,但可以通过标准库函数实现各种操作:

  • 拼接:通过strcat()拼接两个字符串。

  • 复制:通过strcpy()复制一个字符串到另一个地方。

  • 查找strchr()用于在字符串中查找某个字符的位置。

    char *pos = strchr("Hello", 'e');  // 返回指向 'e' 的指针
    
  • 分割:使用strtok()函数可以按照指定的分隔符分割字符串。

    char str[] = "apple,banana,cherry";
    char *token = strtok(str, ",");
    while (token != NULL) {printf("%s\n", token);token = strtok(NULL, ",");
    }
    

4. 字符串的比较

C语言中的字符串比较不能用==,因为==比较的是指针地址,而不是字符串的内容。字符串的内容比较需要用strcmp()

  • strcmp():比较两个字符串的字母顺序。如果相等返回0,如果第一个字符串小于第二个返回负数,反之返回正数。

    int cmp = strcmp("Hello", "World");  // 返回负数,表示 "Hello" < "World"
    

5. 字符串的转换

有时需要将其他类型的数据转换为字符串,或者将字符串转换为其他类型的数据。C语言也提供了相应的函数:

  • 字符串转数字

    • atoi():将字符串转换为整数(int类型)。
    int num = atoi("123");  // 返回 123
    
    • atof():将字符串转换为浮点数(floatdouble)。
    double d = atof("3.14");  // 返回 3.14
    
  • 数字转字符串

    • sprintf():将数字格式化成字符串。
    char buffer[10];
    int num = 123;
    sprintf(buffer, "%d", num);  // 将123格式化为字符串 "123"
    

示例代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>  // 这里是使用 atoi 函数的头文件int main() {char str1[20] = "Hello";char str2[] = "World";// 拼接字符串strcat(str1, str2);printf("拼接后的字符串: %s\n", str1);// 比较字符串int result = strcmp(str1, str2);if (result == 0) {printf("str1 和 str2 相等\n");} else if (result > 0) {printf("str1 大于 str2\n");} else {printf("str1 小于 str2\n");}// 查找字符char *pos = strchr(str1, 'o');if (pos != NULL) {printf("字符 'o' 在字符串中的位置: %ld\n", pos - str1);}// 转换字符串为整数char numStr[] = "456";int num = atoi(numStr);printf("转换后的数字: %d\n", num);return 0;
}

通过上面的内容,你应该对C语言中字符串的概念、处理、运算、比较、转换有了更深入的理解。你可以尝试编写更多代码来巩固这些知识。

相关文章:

C语言字符串学习

在C语言中&#xff0c;字符串&#xff08;String&#xff09;是字符数组&#xff08;character array&#xff09;&#xff0c;并且它以空字符&#xff08;\0&#xff09;结束&#xff0c;表示字符串的结尾。我们可以通过一些常见的操作和概念来详细理解它。 1. 字符串的概念 …...

当你在Linux系统中使用MySQL命令行工具查询数据库时,如果中文显示为问号(?)或其他乱码,简单解决办法。(2)

文章目录 1、问题出现2、解决办法 1、问题出现 2、解决办法 mysql -u [username] -p --default-character-setutf8 [database_name]rootab66508d9441:/# mysql -uroot -p123456 --default-character-setutf8 tingshu_album mysql: [Warning] Using a password on the command …...

API网关之Fizz Gateway

Fizz Gateway 是一款轻量级、高性能的 API 网关&#xff0c;专门为服务间通信、流量控制、请求路由、鉴权与认证等需求而设计。它旨在为分布式系统和微服务架构提供高效的请求处理能力&#xff0c;帮助开发者构建和管理 API 服务。 核心特性 1. 请求路由 Fizz Gateway 通过强…...

pgvector docker版安装;稀疏向量使用;psycopg2 python连接使用

参看: https://cloud.tencent.com/developer/article/2359831 https://hub.docker.com/r/pgvector/pgvector/tags https://github.com/pgvector/pgvector 一、安装 拉取0.7版本 docker pull pgvector/pgvector:0.7.4-pg16运行: docker run --name pgvector -v $(pwd)/dat…...

C#命令行参数解析库System.CommandLine介绍

命令行参数 平常在日常的开发过程中&#xff0c;会经常用到命令行工具。如cmd下的各种命令。 以下为sc命令执行后的截图&#xff0c;可以看到&#xff0c;由于没有输入任何附带参数&#xff0c;所以程序并未执行任何操作&#xff0c;只是输出了描述和用法。 系统在创建一个新…...

CCF CSP题解:密码(key)(202409-1)

题目和思路 题目背景 西西艾弗网对用户密码有一套安全级别评定标准。 题目描述 在西西艾弗网上&#xff0c;用户的密码是一个由大写字母&#xff08;A‐Z&#xff09;、小写字母&#xff08;a‐z&#xff09;、数字&#xff08;0‐9&#xff09;和特殊字符&#xff08;*和 …...

RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案

RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案 &#x1f6e0;️ RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案摘要 &#x1f4c3;引言 ✨1. 什么是递归&#xff1f;&#x1f50d;1.1 递归的基本概念 &#x…...

Linux1-ls,cd,pwd

1.Linux操作系统的根目录用/表示。 Windows操作系统的根目录有D:E: 2.Linux命令格式 命令 [选项] [参数] 例如&#xff1a;ls -l / ls表示显示文件夹内容 -l表示以列表的形式展示 /表示显示的是根目录文件夹的内容 其中&#xff0c;[]里面的内容可省略&#xff…...

【高级编程】XML DOM4J解析XML文件(含案例)

文章目录 DOM4JDOM4J 解析 XML读取修改添加删除 XML&#xff08;EXtensible Markup Language&#xff09;&#xff0c;可扩展标记语言。一种用于存储和传输数据的标记语言。XML 与操作系统、编程语言的开发平台无关。实现不同系统之间的数据交换。 作用&#xff1a;数据交互&a…...

查看VSFTPD配置的服务器路径和linux系统有哪些用户

要查看VSFTPD (Very Secure FTP Daemon)配置中定义的服务器路径,需要检查VSFTPD的配置文件。这通常可以在配置文件中找到并有不同的选项来设置路径。 这里有几个方法可以查看配置的服务器路径: 1. 检查主配置文件 VSFTPD的默认配置文件通常位于`/etc/vsftpd.conf`。可以使用…...

JavaEE: 创造无限连接——网络编程中的套接字

文章目录 Socket套接字TCP和UDP的区别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP api的使用UDPDatagramSocketDatagramPacketInetSocketAddress练习 TCPServerSocketSocket练习 Socket套接字 Socket是计算机网络中的一种通信机制&#xff0…...

记K8s组件harbor和kuboard故障恢复

#记录一次工作实践# 故障现象&#xff1a; 本地私有仓库harbor和控制台kuboard均无法正常登陆。 解决过程&#xff1a; 1、harbor恢复过程 通过docker ps -a |grep harbor查看harbor相关的容器状态&#xff0c;发现均显示启动状态&#xff0c;但是仓库无法访问。 通过doc…...

c++ return {};

https://segmentfault.com/q/1010000042734336 return {}; 表示“返回一个用空 列表初始化器 初始化的函数返回类型的对象”。确切的行为取决于返回对象的类型。 std::string get_string() {return {}; // an empty string is returned }...

【设计模式-适配】

Adapter Pattern&#xff08;适配器模式&#xff09; 是一种结构型设计模式&#xff0c;其主要目的是让不兼容的接口能够协同工作。适配器模式通过引入一个适配器类&#xff0c;转换一个类的接口&#xff0c;使得原本不兼容的接口可以互相配合&#xff0c;从而实现接口的兼容性…...

深度学习02-pytorch-08-自动微分模块

​​​​​​​ 其实自动微分模块&#xff0c;就是求相当于机器学习中的线性回归损失函数的导数。就是求梯度。 反向传播的目的&#xff1a; 更新参数&#xff0c; 所以会使用到自动微分模块。 神经网络传输的数据都是 float32 类型。 案例1: 代码功能概述&#xff1a; 该…...

使用Python实现深度学习模型:智能宠物监控与管理

在现代家庭中,宠物已经成为许多家庭的重要成员。为了更好地照顾宠物,智能宠物监控与管理系统应运而生。本文将详细介绍如何使用Python实现一个智能宠物监控与管理系统,并结合深度学习模型来提升其功能。 一、准备工作 在开始之前,我们需要准备以下工具和材料: Python环境…...

【HTTPS】对称加密和非对称加密

HTTPS 是什么 HTTPS 是在 HTTP 的基础上&#xff0c;引入了一个加密层&#xff08;SSL&#xff09;。HTTP 是明文传输的&#xff08;不安全&#xff09; 当下所见到的大部分网站都是 HTTPS 的&#xff0c;这都是拜“运营商劫持”所赐 运营商劫持 下载⼀个“天天动听“&…...

MySQL中的LIMIT与ORDER BY关键字详解

前言 众所周知&#xff0c;LIMIT和ORDER BY在数据库中&#xff0c;是两个非常关键并且经常一起使用的SQL语句部分&#xff0c;它们在数据处理和分页展示方面发挥着重要作用。 今天就结合工作中遇到的实际问题&#xff0c;回顾一下这块的知识点。同时希望这篇文章可以帮助到正…...

Java 编码系列:集合框架(List、Set、Map 及其常用实现类)

引言 在 Java 开发中&#xff0c;集合框架是不可或缺的一部分&#xff0c;它提供了存储和操作一组对象的工具。Java 集合框架主要包括 List、Set 和 Map 接口及其常用的实现类。正确理解和使用这些集合类不仅可以提高代码的可读性和性能&#xff0c;还能避免一些常见的错误。本…...

Go进阶概览 -【7.2 泛型的使用与实现分析】

7.2 泛型的使用与实现分析 泛型是Go 1.18引入的概念&#xff0c;在引入这个概念前经过了好几年的考量最终才将这这个特性加进去。 泛型在多种语言中都是存在的&#xff0c;比如C、Java等语言中都有泛型的概念。 本节我们将针对泛型的使用、实现原理进行整体的讲解。 本节代…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...