当前位置: 首页 > 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等语言中都有泛型的概念。 本节我们将针对泛型的使用、实现原理进行整体的讲解。 本节代…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...

无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技

无需布线的革命&#xff1a;电力载波技术赋能楼宇自控系统 在楼宇自动化领域&#xff0c;传统控制系统依赖复杂的专用通信线路&#xff0c;不仅施工成本高昂&#xff0c;后期维护和扩展也极为不便。电力载波技术&#xff08;PLC&#xff09;的突破性应用&#xff0c;彻底改变了…...