C语言字符串常用函数总结(持续更新)

2023-05-16

        最近在重温C语言的一些基础知识,感觉C语言字符串操作还是比较难的,在学习的过程中总结了一些常用的字符串相关函数,包括C语言字符串输入、字符串输入、计算字符串长度、字符串赋值、字符串分割、字符串拼接、字符串与整型的转换等。

目录

字符串定义:

相关函数:

1.字符串输入与输出

(1)scanf()和printf()

(2)gets()和puts()

2.字符串操作

(1)计算字符串长度函数——strlen()

(2)字符串赋值函数——strcpy()

(3)字符串分割函数——strtok()

(4)字符串拼接函数——strcat()

(5)字符串转整型——atoi()

(6)字符串转浮点型——atof()

(7)字符串转整型——strtol()

(8)字符串比较——strcmp()

(9)字符串查找——strstr()

(10)字符串报错——strerror()

总结


字符串定义:

        C语言中是没有字符串类型的,所以采用字符数组对字符串进行处理:

        字符数组定义:char str[];

        说明:一维字符数组,用于存储和处理一个字符串。

        字符串数组定义:char str[][];

        说明:二维字符数组,用于同时存储和处理多个字符串。


相关函数:

1.字符串输入与输出

(1)scanf()和printf()

        直接通过C语言标准化输入输出函数实现,使用”%s”参数(单个字符用”%c”)。

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

int main()
{
    char str[] = {0};
    scanf("%s",str);
    printf("%s",str);
    return 0;
}

        说明:

        输入字符串时,遇到回车或空格,输入结束,并且自动在串后面加上结束标志'\0';

        输出字符串时,遇到字符串结束标志’\0',输出结束。

(2)gets()和puts()

        gets(str):从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间;

        puts(str):与printf("%s\n",str)的作用相同,但是只能输出字符串,不能是数值或进行格式变换。

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

int main()
{
    char str[] = {0};
    gets(str);
    puts(str);
    return 0;
}

        说明:

        输入字符串时,遇到回车,输入结束。

        gets()输入与scanf()输入不同的是,gets()允许接收空格字符。

        gets(str)、puts(str)、scanf(“%s”,str)、printf(“%s”,str)可以混合使用,不用拘泥形式,比如:需要读取” ”字符所以使用gets(str)进行程序输入,同时字符串输出又使用printf(“%s”,str)。

2.字符串操作

(1)计算字符串长度函数——strlen()

        strlen(str):返回字符串str长度。

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

int main()
{
    char str[] = "China";
    printf("%d",strlen(str));
    return 0;
}

(2)字符串赋值函数——strcpy()

        strcpy(str1,str2):字符串赋值函数,C语言中字符串赋值不能直接使用 ’=’ 进行赋值,必须使用strcpy(str1,str2)函数进行赋值。

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

int main()
{
    char str1[50];
    char str2[10] = "Chinese!";
    strcpy(str1,str2);
    printf("%s\n",str1);
    return 0;
}

(3)字符串分割函数——strtok()

        strtok(str,c):对字符串按照子字符串c(可以是单个字符)进行分割,返回分割后的子字符串。

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

int main()
{
    char str[20] = "China,Chinese";
    char *token; //返回值
    char c[2] = ",";
    token = strtok(str,c);
    while(token != NULL)
    {
        printf("%s\n",token);
        token = strtok(NULL,c); //继续分割
    }
    return 0;
}

        注意:这里的str字符串长度大小必须给定。

(4)字符串拼接函数——strcat()

        strcat(str1,str2):字符串拼接函数,将str2字符串拼接到str1字符串后。

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

int main()
{
    char str1[50] = "I am";
    char str2[10] = " Chinese!";
    strcat(str1,str2);
    printf("%s\n",str1);
    return 0;
}

        注意:这里str1的定义长度大小,必须大于拼接后字符串长度(即len >= len(str1) + len(str2))。

(5)字符串转整型——atoi()

        atoi(str):将字符串str转为整型。(支持正负数识别)

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

int main()
{
    char str[10] = "100";
    int value;
    value = atoi(str);
    printf("%d\n",value);
    return 0;
}

        注意:str要求为数字字符串,如果为其他字符,返回结果为0。

(6)字符串转浮点型——atof()

        atof(str):将字符串str转为浮点型。(支持正负数识别)

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

int main()
{
    char str[10] = "100";
    double value;
    value = atof(str);
    printf("%lf\n",value);
    return 0;
}

        注意:str要求为数字字符串,如果为其他字符,返回结果为0。

        atoi()和atof()函数有一个缺点是:如果当字符串是其他非数字字符,会返回0,如果是数字0的话,照样返回0,这样就无法辨别到底是字符’0’还是其他非数字字符。这里提供一个函数(7)进行字符串到整数的转换,可以识别数字字符’0’。

(7)字符串转整型——strtol()

        long int strtol(const char *str, char **endptr, int base):将字符串str根据base转成对应进制数,并将转后结果作为函数结果返回,endptr指针指向原字符串中转换字符串后的下一个字符。(根据函数运行后endptr的位置可以对上述问题进行区分,如果是’0’,endptr指向原字符串首位)

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

int main()
{
    char str[10] = "0";
    char *tt;
    int value;
    value = strtol(str,&tt,10);
    if(tt != str)
    {
        printf("转后的数字为:%d",value);
    }
    else
    {
        printf("转化的是字符!");
    }
        
    return 0;
}

(8)字符串比较——strcmp()

        int strcmp(const char *s1,const char *s2):字符串比较函数,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。(两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。)

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

int main()
{
    char str1[10] = "aaaaa";
    char str2[10] = "bbbb";
    int value;
    value = strcmp(str1,str2); 
    printf("%d",value);
    return 0;
}

(9)字符串查找——strstr()

        char *strstr(const char *str1, const char *str2):字符串查找函数,用于查找一个字符串在另一个字符串中的位置。返回指向 str1 中第一次出现的 str2 的指针;如果 str2 不是 str1 的一部分,则返回空指针。

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

int main()
{
    char str1[10] = "aabaa";
    char str2[10] = "ba";
    char *value;
    value = strstr(str1,str2); 
    printf("%s",value);
    return 0;
}

(10)字符串报错——strerror()

        char * strerror ( int errnum ):用于获取指向错误消息字符串的指针。返回值为char*类型,只想描述错误的字符串的指针。C语言的库函数在执行失败时,都会有一个错误码(0 1 2 3 4 5 6 7 8 9 ...)。

函数示例展示:

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

int main()
{
    printf("%s\n",strerror(0));
    printf("%s\n",strerror(1));
    printf("%s\n",strerror(2));
    printf("%s\n",strerror(3));
    printf("%s\n",strerror(4));
    printf("%s\n",strerror(5));
    printf("%s\n",strerror(6));
    return 0;
}

运行结果:

 使用实例:

         场景:打开文件错误,自动生成错误码为2,通过strerror()函数显示错误信息。

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

int main()
{
    FILE * pfile;
    pfile = fopen("test.tt","r");
    printf("错误码:%d\n",errno);
    if(pfile == NULL)
    {
        printf("打开文件失败 代码:%s",strerror(errno));
    }
    return 0;
}

运行结果:


 

总结

        对一些C语言中字符串相关的常见函数进行了总结,包括C语言字符串输入、字符串输入、计算字符串长度、字符串赋值、字符串分割、字符串拼接、字符串与整型的转换等。后续会持续更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言字符串常用函数总结(持续更新) 的相关文章

随机推荐

  • CubeMX配合PlatformIO开发STM32(STorM32),配置双MPU6050(板载与外置),并使用gui显示数据

    本人使用的设备 驱动 xff1a Windows10串口助手 4 3 25 其实啥都行 桃饱随处可买的usb ttl xff08 ch340G xff09 桃饱随处可买的stlinkmpu6050 xff08 一个板载 xff0c 一个通过
  • ros学习心得(九)ros之Topic通讯机制及发送与接收节点的编码与调试

    节点间需要有数据交互 xff0c 而ros所要解决的问题就是数据该如何交互 一 通讯原理图 ros在设计Node间通讯机制的时候 xff0c 考虑的是很周全的 Publisher 发送消息的 xff0c Subscriber 接收消息的 T
  • 硬石开发板STM32F407IGT6 (HAL库)学习笔记

    硬石开发板STM32F407IGT6 xff08 HAL库 xff09 学习笔记 2020 06 21 2020 06 22 2020 06 23 2020 06 24 该笔记为学习时遇到的问题与解决方法等内容的记录 xff0c 可能有错
  • Ubuntu20/视觉SLAM十四讲踩坑记录

    Ubuntu 视觉SLAM十四讲踩坑记录 Ubuntu xff08 20 xff09 视觉SLAM十四讲踩坑记录 xff1a 共性问题 xff1a 1 安装OpenCV后 xff0c 例程仍无法找到OpenCV文件 ch3 visualiz
  • AMESim2020.1仿真编译失败解决方法之一

    AMESim2020 1仿真编译失败解决方法之一 问题描述 xff1a 软件安装正确 xff0c 在准备和matlab联合仿真时 xff0c 换用VC2015以上版本编译器编译失败 解决方法 xff1a 到AMESim安装路径下 xff0c
  • Linux/Ubuntu20.04下载安装Geant4及B1示例测试

    Linux Ubuntu20 04下载安装Geant4及B1示例测试 0 参考内容1 下载geant4软件包2 geant4安装准备内容3 geant4文件编译4 安装数据包4 1 安装方式14 2安装方式2 5 添加文件路径6 B1示例测
  • Ubuntu20.04进行CUDA11.0及对应CUDNN安装

    Ubuntu20 04进行CUDA11 0及对应CUDNN安装 xff1a 基本步骤 xff1a 1 安装nvidia显卡驱动 可直接通过 xff1a 软件和更新 gt 附加驱动 选择满足CUDA版本的nvidia专有驱动 gt 应用更改
  • git分离头指针处理

    文章目录 1 什么是git分离头指针2 将git 分离头指针所指向的代码 xff08 commit id xff09 保存下来总结 本文将主要介绍一下git分离头指针状态 xff0c 并记录如何将分离头指针状态的代码合并到分支中 1 什么是
  • Docker使用系列——Docker安装(Ubuntu20.04)

    Docker使用系列 Docker安装 xff08 Ubuntu20 04 xff09 卸载安装测试问题 直接按官方安装教程即可 xff1a Install Docker Engine on Ubuntu 卸载 安装过老版本的Docker则
  • Docker使用系列——生成一个Ubuntu20.04+Pyqt5的容器

    由于在自己的电脑中安装Pyqt5不成功 xff0c 原因是与其他环境中的qt版本不兼容 因此 xff0c 了解到了docker xff0c 这里记录一下在docker中安装pyqt5过程 1 安装Docker并从官方仓库拉取Ubuntu 2
  • C语言实现链表(链式存储结构)

    链表 xff08 链式存储结构 xff09 及创建 链表 xff0c 别名链式存储结构或单链表 xff0c 用于存储逻辑关系为 一对一 的数据 与顺序表不同 xff0c 链表不限制数据的物理存储状态 xff0c 换句话说 xff0c 使用链
  • cmake与make的区别及CMakeLists.txt文件编写

    一 cmake与make的区别 make工具是一个自动化编译工具 xff0c 它会根据Makefile中的规则进行批处理编译 当需要编译的文件较多时 xff0c 使用make工具会大大提高效率 但是 xff0c 当项目较大时 xff0c 编
  • 接口测试学习必看 - 实现简易接口测试

    前言 终于整理到了接口测试部分的内容 xff0c 接口测试可以说是软件测试入门到初级软件测试的一个必备进阶技巧 很多挂着 灰盒测试 的标识 xff0c 其实就是对接口测试的另外一层理解 何为 灰盒 xff0c 能够看到一部分本质的东西 xf
  • roscpp 底层通讯协议更改

    ROS为机器人开发者们提供了不同语言的编程接口 xff0c 其中C 43 43 接口叫做roscpp xff0c 用来创建topic service param xff0c 实现ROS的通信功能 roscpp is a C 43 43 im
  • c++学习心得:STL初学(基础篇)

    标准函数库 xff08 STL xff09 学习心得 基础篇 STL主要由两种组件构成 xff1a 一是容器 xff0c 包括vector list set map等类 xff1b 另一种组件是用以操作这些容器的所谓的泛型算法包括find
  • STM32 LoRa无线数传模块 PC通过串口传输数据到单片机

    STM32 PC通过串口助手无线传输数据到单片机 之前学习了STM32单片机 xff0c 使用正点原子的精英板 两个TTL 转LoRa 半双工无线数传模块 xff0c 通过PC机串口助手 xff0c 向32单片机传输数据 xff0c 接收数
  • 如何使用 datax 将 mysql 中的数据拉取到 hive ?

    需求 使用datax将mysql中的数据拉取到hive的ods层 步骤 首先在mysql中确定好需要拉取的表user extend xff0c 然后对应在hive中创建好空表 xff0c 等待拉取 这里对应创建的hive表格如下 CREAT
  • C语言实现TCP客户端、服务器

    服务器 include lt stdio h gt include lt sys socket h gt include lt netinet in h gt include lt arpa inet h gt include 34 str
  • 树莓派控制无人机实现定点降落(概述目录)

    最近在做一个无人机与车协同的项目 xff0c 无人机需要比较准确地落到车的平台上 xff0c 而且因为经费较少只能用树莓派 xff0c 我的思路以及在调试过程中遇到的问题 xff0c 将公布在我接下来的博文里 这里列个目录 xff1a 树莓
  • C语言字符串常用函数总结(持续更新)

    最近在重温C语言的一些基础知识 xff0c 感觉C语言字符串操作还是比较难的 xff0c 在学习的过程中总结了一些常用的字符串相关函数 xff0c 包括C语言字符串输入 字符串输入 计算字符串长度 字符串赋值 字符串分割 字符串拼接 字符串