字符串函数

目录

读取字符串的函数

1.gets()函数

2.fgets()函数(不是所有的编译器都支持例如CodeBlocks)

3.scanf()函数

4.getchar()函数

输出字符串的函数

1.puts()函数

2.fputs()函数(编译器不一定支持)

3.printf()函数

4.putchar()函数

处理字符串的函数

1.strlen()函数

2.strcat()函数

3.strncat()函数

4.strcmp()函数

5.strncmp()函数

7.strncpy()函数

8.sprintf()函数


读取字符串的函数

1.gets()函数

说明:gets函数简单易用,它读取整行输入,直至遇到换行符,然后丢掉换行符,储存其余字符,并在末尾添加一个空字符使其成为一个C字符串。它经常和puts()函数配对使用。

在使用scanf()输入一个字符后,回车,而下面的gets()函数就直接接收了这个\n,因此无法读取外部输入。

但gets()函数存在一个严重的缺陷,这个缺陷就是:它不会检查数组是否能够装的下输入行,这可能导致大问题。

2.fgets()函数(不是所有的编译器都支持例如CodeBlocks)

fgets()和gets()的区别:

1.fgets()函数通过的第2个参数指明了读入字符的最大数量。如果给参数的值是n,那么fgets()将读入n-1个字符,或者遇到第一个换行符为止。

2.如果fgets()读到一个换行符,会把它储存到字符串中。这点与gets()不同,gets()会丢弃换行符。

3.fgets()函数第3个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数,该标识符定义在stdio.h中。

因为fgets()函数把换行符放在字符串的末尾(假设输入行不溢出),通常要与fputs()函数(和puts()类似)配对使用,除非该函数不在字符串末尾加换行符。fputs()函数的第2个参数指明它要写的文件。如果要显示在计算机显示器上,应使用stdout(标准输出)作为该参数。

3.scanf()函数

1.scanf以下一个空白字符(空行、空格、制符表或换行符)作为字符串的结束。

2.如果指定了字段宽度,如%10s,那么scanf()将读取10个字符或读到第一个空白字符停止(先满足的条件是结束输入的条件)

4.getchar()函数

getchar()函数一次只能输入一个字符。

输出字符串的函数

1.puts()函数

1.puts()函数在显示字符串时会自动在其末尾添加一个换行符。

2.有双引号括起来的内容是字符串常量(只能是字母和数字,不能是中文),且被视为该字符串的地址。

3.数组名也被看作是地址。

2.fputs()函数(编译器不一定支持)

fputs()函数的第2个参数指明它要写的文件。如果要显示在计算机显示器上,应使用stdout(标准输出)作为该参数。

3.printf()函数

和puts()函数一样,printf()也把字符串的地址当作参数。虽然printf()函数没有puts()函数那么方便且计算机执行的时间也更长,但它更多才多艺,因为它可以格式化不同的数据类型。

4.putchar()函数

只能输出一个字符,通常与getchar()搭配使用。

处理字符串的函数

C库提供了多个处理字符串的函数,ANSI C把这些函数的原型放在string.h头文件中。其中最常用的函数有strlen()、strcat()、strcmp()、strncmp()、strcpy()和strncpy()。另外,还有sprintf()函数,其原型在stdio.h头文件中。

1.strlen()函数

格式:strlen(s);

s可以是字符数组名或是字符串。

用于统计字符串的长度。

2.strcat()函数

格式:strcat(a,b);

a只是字符数组名,b可以是字符数组名或是字符串常量。

strcat()(用于拼接字符串)函数接受两个字符串作为参数,该函数把第2个字符串的备份附加在第1个字符串末尾,并把拼接后形成的新字符串作为第1个字符串,第2个字符串不变。strcat()函数的类型是char*(即,指向char的指针)。该函数返回第1个参数。

3.strncat()函数

格式:strncat(a,b,n);

a只是字符数组名,b可以是字符数组名或是字符串常量,n是一个整型常量。

strcat()函数无法检测第1个数组是否能容纳第2个字符串,当然可以用strlen()查看第1个数组的长度。注意,要给拼接后的字符串长度加1才够空间存放末尾的空字符,或者,用strncat(),该函数的第3个参数指定了最大添加字符数。例如strncat(a,b,10);将b字符串的内容附加给a,在加到第10个字符或遇到字符串时停止。因此,算上空字符(无论哪种情况都要添加空字符),a数组应该足够大,以容纳a字符串(不包括空字符)、10个字符和末尾的空字符。

4.strcmp()函数

格式:strcmp(a,b);

a可以是字符数组名或是字符串常量,b可以是字符数组名或是字符串常量。

比较过程是从两个字符串的起始位置开始,依次比较对应位置上字符的ASCII码值的大小如果ASCII码值相等,则继续比较下一个字符,否则,ASCII码值大的字符串大。直到遇到不同字符或‘\0’时比较结束。

a与b相同时,strcmp(a,b)的值为0;

a大于b时,strcmp(a,b)的值为一个正数;

a小于b时,strcmp(a,b)的值为一个负数;

其它系统可能返回两者的ASCII码之差。

注意:1.该函数比较的是字符串,不是字符,所以其参数应该是字符串(例:”apple“和”A“),而不是字符(‘A’)。

2.strcmp()比较所有的字符,不只是字母。

5.strncmp()函数

格式:strncmp(a,b,n);

用法与strcmp相似,直到第n个字符。

6.strcpy()函数

格式:strcpy(a,b);

功能:把b复制到a中。

a只是字符数组名,b可以是字符数组名或是字符串常量。

a数组的长度应不小于b数组的长度,以保证能够存储b数组。

该函数还有两个有用的属性:

1.strcpy()的返回类型是char*,该函数返回的是的一个参数的值,即一个字符的地址。

2.第1个参数不必指向数组的开始。这个属性可以用于拷贝数组的一部分。

7.strncpy()函数

格式:strncpy(a,b,n);

功能:把字符串b的前n个字符复制到a中。

8.sprintf()函数

格式:sprintf(s,"%s%s",a,b);

该函数声明在stdio.h中,而不是string.h中。该函数与printf()类似,但它是把数据写入字符串,而不是打印在显示器上。因此该函数可以把多个元素组合成一个字符串。sprintf()的第1个参数是目标字符串的地址。其余参数和printf()相同,即格式字符串和代写入项的列表。

功能:1、可以控制精度

char str[20];

double f=14.309948;

sprintf(str,”%6.2f”,f);

2、可以将多个数值数据连接起来

char str[20];

int a=20984,b=48090;

sprintf(str,”%3d%6d”,a,b);

str[]=”20984 48090”

3、可以将多个字符串连接成字符串

char str[20];

char s1[5]={‘A’,’B’,’C’};

char s2[5]={‘T’,’Y’,’x’};

sprintf(str,”%.3s%.3s”,s1,s2);

%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度;n表示小数的位数。

 sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。比如:
  
  char* who = “I”;
  char* whom = “CSDN”;
  sprintf(s, “%s love %s.”, who, whom); //产生:“I love CSDN. "
  
  char a1[] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’};
  char a2[] = {‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’};
  如果:
  sprintf(s, “%s%s”, a1, a2); //Don’t do that!
  十有八九要出问题了。是否可以改成:
  sprintf(s, “%7s%7s”, a1, a2);
  也没好到哪儿去,正确的应该是:
  sprintf(s, “%.7s%.7s”, a1, a2);//产生:“ABCDEFGHIJKLMN”
  这可以类比打印浮点数的”%m/nf”,在”%m.ns”中,m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n 才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m 没什么大用,还是点号后面的n 用的多。自然,也可以前后都只取部分字符:
  sprintf(s, “%.6s%.5s”, a1, a2);//产生:“ABCDEFHIJKL”
————————————————
有参考过:https://blog.csdn.net/weixin_45525272/article/details/104480563

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于Vue.js的陕西非物质文化遗产网站

文末获取源码,项目编号: S 065 。 \color{red}{文末获取源码,项目编号:S065。} 文末获取源码,项目编号:S065。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于多尺度分量特征学习的用户级超短期负荷预测》

这篇文章的标题表明研究的主题是用户级超短期负荷预测,并且该预测方法基于多尺度分量特征学习。让我们逐步解读这个标题: 用户级: 这表示研究的焦点是在个体用户层面上进行的。负荷预测可能是指电力系统中的负荷,即电力需求。用户…

大模型能否生成搜索引擎的未来?

文|郝 鑫 编|刘雨琦 ChatGPT火爆之前,水面下,也有中国公司也在朝着智能助手的方向努力。夸克便是其中之一。在GPT风靡科技圈后,国内就开始陆续冒出一些大模型厂商。对当时夸克而言,做大模型毋庸置疑&am…

五种多目标优化算法(MOPSO、MOAHA、NSGA2、NSGA3、MOGWO)求解微电网多目标优化调度(MATLAB)

一、多目标优化算法简介 (1)多目标粒子群优化算法MOPSO 多目标应用:基于多目标粒子群优化算法MOPSO求解微电网多目标优化调度(MATLAB代码)-CSDN博客 (2)多目标人工蜂鸟算法(MOAHA…

Redis-Redis 高并发分布式锁

集群分布式场景高并发 1.negix配置代理和路由 高并发场景超卖问题 1.使用原生redis控制超卖时(若是商品,则可以将商品id作为锁对象),会遇到的问题 问题一:若直接使用:将获取锁的对象和设置的超时的时间分开,则不能控…

桥接设计模式

package com.jmj.pattern.bridge;/*** 视频文件(实现化角色)*/ public interface VideoFile {void decode(String fileName); }package com.jmj.pattern.bridge;public class RmvFile implements VideoFile{Overridepublic void decode(String fileName) {System.out.println(&…

论文阅读——MCAN(cvpr2019)

补充一下MCAN-VQA: 对图片的处理:首先输入图片到Faster R-CNN,会先设定一个判断是否检测到物体的阈值,这样动态的生成m∈[10,100]个目标,然后从检测到的对应的区域通过平均池化提取特征。第i个物体特征表示为&#xff…

ubuntu22.04系统下载程序和依赖,并拷贝到指定路径下

脚本1 apt install aptitude apt-get -d install xxx #xxx是待下载的安装包 mv /var/cache/apt/archives/* /home/tuners/1apt install aptitude apt-get -d install xxx mv /var/cache/apt/archives/*.deb /home/tuners/1 xxx 为程序包名称 /home/tuners/1为保存程序包的…

网络通信基础概念介绍

网络通信基础概念介绍 局域网LAN 局域网,即 Local Area Network,简称LAN。 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。 局域网是指在一个相对较小的…

微机课设--汇编语言在51单片机上写一个四位十进制加法器

代码如下 KEYVAL EQU 30HKEYTM EQU 31HKEYSCAN EQU 32HDAT EQU 33HSCANLED EQU 37HS_DAT EQU 38HD_DAT EQU 39HR_DATL EQU 3AHR_DATH EQU 3BH CALFLAG EQU 3CHFLAG BIT 00HORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#01HMOV TH0,#0D8HMOV TL0,…

过渡曲线的构造之平面PH曲线

平面PH曲线的构造及其相应性质 平面PH曲线的构造及其相应性质PH曲线理论三次PH曲线的构造及性质四次PH曲线的构造及性质五次PH曲线的构造及性质非尖点五次PH曲线尖点五次PH曲线 参考文献 平面PH曲线的构造及其相应性质 过渡曲线常需要满足在连接点处位置连续、曲率连续以及切线…

如何看待 2023 OPPO 开发者大会?潘塔纳尔进展如何?AndesGPT 有哪些亮点?

在2023年11月16日举行的OPPO开发者大会(ODC23)上,OPPO带来了全新ColorOS 14、全新互联网服务生态以及健康服务进展,这些新动态中有许多值得关注的地方。 1、全新ColorOS 14: 效率提升:ColorOS 14通过一系列…

java基于springboot公益帮学网站 新闻发布系统的设计与实现vue

以Java为开发平台,综合利用Java Web开发技术、数据库技术等,开发出公益帮学网站。用户使用版块:可以选择注册并登录,可以浏览信息、可以网上互动、发布文章、内容推荐等。后台管理员管理版块:以管理员身份登录网站后台…

常见的数据库面试题含答案

1、什么是数据库? 数据库是一个组织和存储数据的集合,它采用特定的数据结构和管理模式,以提供对数据的高效访问和管理。 2、请解释 SQL 是什么? SQL(Structured Query Language)是一种用于管理和操作关系…

机器学习---贝叶斯网络与朴素贝叶斯

1. 贝叶斯法则 如何判定一个人是好人还是坏人? 当你无法准确的熟悉一个事物的本质时,你可以依靠与事物特定本质相关的事件出现的次数来判断 其本质属性的概率。如果你看到一个人总是做一些好事,那这个人就越可能是一个好人。 数学语言表达…

JVM字节码文件的相关概述解读

Java全能学习面试指南:https://javaxiaobear.cn 1、字节码文件 从下面这个图就可以看出,字节码文件是可以跨平台使用的 想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。 https://docs.oracle.com/java…

【一文讲清楚 Anaconda 相关环境配置】

文章目录 0 前言1 Package 与环境1.1 module1.2 package1.3 环境 2 Conda、Miniconda、Anaconda和Pip & PyPI2.1 Conda2. 2 Miniconda2.3 Anaconda2.3.1 Anaconda Navigator2.3.2 Anaconda PowerShell Prompt & Anaconda Prompt2.3.3 Jupyter notebook 2.4 Pip & P…

【数据结构】什么是栈?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌栈的定义 📌元素进栈出栈的顺序 📌栈的抽象数据类型 📌栈的顺序存储结构 📌栈的链式存储结构 链栈的进…

MySql之索引,视图,事务以及存储过程举例详解

一.数据准备 数据准备可参考下面的链接中的数据准备步骤 MySql之内连接,外连接,左连接,右连接以及子查询举例详解-CSDN博客 (如有问题可在评论区留言) 二.存储过程 1.定义 存储过程 PROCEDURE ,也翻译…

【代码】基于量子粒子群算法(QPSO)优化LSTM的风电、负荷等时间序列预测算法matlab

程序名称:基于量子粒子群算法(QPSO)优化LSTM的风电、负荷等时间序列预测算法 实现平台:matlab 代码简介:代码是基于QPSO-LSTM的负荷、光伏、风电等时间序列预测,MATLAB编写。包含LSTM(长短时记…