目录

字符串相关

1.char *gets(char *s);

#include<stdio.h>

功能:

  从标准输入读入字符,并保存到s指定的内存空间,直到出现换行符或读到文件结尾为止

参数:

  s:字符串首地址

返回值:

  成功:读入的字符串

  失败:NULL

gets(str)与scanf(“%s”,str)的区别:

  gets(str)允许输入的字符串含有空格

  scanf(“%s”,str)不允许含有空格

注意:

  由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况。

举例:

printf("请输入str: ");
gets(str);
printf("str = %s\n", str);

2.char *fgets(char *s, intsize, FILE *stream);

#include<stdio.h>

功能:

  从stream指定的文件内读入字符,保存到s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止,最后会自动加上字符 '\0' 作为字符串结束

参数:

  s:字符串

  size:指定最大读取字符串的长度(size - 1)

  stream:文件指针,如果读键盘输入的字符串,固定写为stdin

返回值:

  成功:成功读取的字符串

  读到文件尾或出错: NULL

描述:

  fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过scanf和gets输入一个字符串的时候,不包含结尾的“\n”,但通过fgets结尾多了“\n”。fgets()函数是安全的,不存在缓冲区溢出的问题。

举例:

char str[100];
printf("请输入str: ");
fgets(str, sizeof(str), stdin);
printf("str = \"%s\"\n", str);

3.int puts(const char *s);

#include<stdio.h>

功能:

  标准设备输出s字符串,在输出完成后自动输出一个'\n'。

参数:

  s:字符串首地址。

返回值:

  成功:非负数

  失败:-1

举例:

#include <stdio.h>
int main()
{
printf("hello world");
puts("hello world"); return 0;
}

4.int fputs(const char *str, FILE *stream);

#include<stdio.h>

功能:

  将str所指定的字符串写入到stream指定的文件中,字符串结束符'\0'不写入文件。

参数:

  str:字符串

  stream:文件指针,如果把字符串输出到屏幕,固定写为stdout。

返回值:

  成功:0

  失败:-1

注意:

  fputs()是puts()的文件操作版本,但fputs() 不会自动输出一个'\n'。

举例:

printf("hello world");
puts("hello world");
fputs("hello world", stdout);

5. size_t strlen(const char *s);

#include<string.h>

功能:

  计算指定指定字符串s的长度,不包含字符串结束符‘\0’.

参数:

   s:字符串首地址

返回值:

   字符串s的长度,size_t 为unsigned int类型

举例:

char str[] = "abcdefg";
int n = strlen(str);
printf("n = %d\n", n);

6. char *strcpy(char *dest, const char *src);

#include<string.h>

功能:

  把src所指向的字符串复制到dest所指向的空间中,'\0'也会拷贝过去

参数:

  dest:目的字符串首地址

  src:源字符首地址

返回值:

  成功:返回dest字符串的首地址

  失败:NULL

  注意: 如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况。

举例:

char dest[20] = "123456789";
char src[] = "hello world";
strcpy(dest, src);
printf("%s\n", dest);

7. char *strncpy(char *dest, const char *src, size_tn);

#include<string.h>

功能:

  把src指向字符串的前n个字符复制到dest所指向的空间中,是否拷贝结束符看指定的长度是否包含'\0'。

参数:

  dest:目的字符串首地址

  src:源字符首地址

  n:指定需要拷贝字符串个数

返回值:

  成功:返回dest字符串的首地址

  失败:NULL

举例:

char dest[20] ;
char src[] = "hello world"; strncpy(dest, src, 5);
printf("%s\n", dest); dest[5] = '\0';
printf("%s\n", dest);

8. char *strcat(char *dest, const char *src);

#include<string.h>

功能:

  将src字符串连接到dest的尾部,‘\0’也会追加过去

参数:

  dest:目的字符串首地址

  src:源字符首地址

返回值:

  成功:成功:返回dest字符串的首地址

  失败:NULL

举例:

char str[20] = "123";
char *src = "hello world";
printf("%s\n", strcat(str, src));

9. char *strncat(char *dest, const char *src, size_tn);

#include<string.h>

功能:

  将src字符串前n个字符连接到dest的尾部,‘\0’也会追加过去

参数:

  dest:目的字符串首地址

  src:源字符首地址

  n:指定需要追加字符串个数

返回值:

  成功:成功:返回dest字符串的首地址

  失败:NULL

举例:

char str[20] = "123";
char *src = "hello world";
printf("%s\n", strncat(str, src, 5));

10. int strcmp(const char *s1, const char *s2);

#include<string.h>

功能:

   比较 s1 和 s2 的大小,比较的是字符ASCII码大小。

参数:

  s1:字符串1首地址

  s2:字符串2首地址

返回值:

  相等:0

  大于:>0

  小于:<0

举例:

char *str1 = "hello world";
char *str2 = "hello mike"; if (strcmp(str1, str2) == 0)
{
printf("str1==str2\n");
}
elseif (strcmp(str1, str2) > 0)
{
printf("str1>str2\n");
}
else
{
printf("str1<str2\n");
}

11. int strncmp(const char *s1, const char *s2, size_tn);

#include<string.h>

功能:

   比较 s1 和 s2 前n个字符的大小,比较的是字符ASCII码大小。

参数:

  s1:字符串1首地址

  s2:字符串2首地址

  n:指定比较字符串的数量

返回值:

  相等:0

  大于:>0

  小于:<0

举例:

char *str1 = "hello world";
char *str2 = "hello mike"; if (strncmp(str1, str2, 5) == 0)
{
printf("str1==str2\n");
}
elseif (strcmp(str1, "hello world") > 0)
{
printf("str1>str2\n");
}
else
{
printf("str1<str2\n");
}

12. int sprintf(char *str , const char *format, ...);

#include<stdio.h>

功能:

  根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符 '\0' 为止。

参数:

  str:字符串首地址

  format:字符串格式,用法和printf()一样

返回值:

  成功:实际格式化的字符个数

  失败: - 1

举例:

char dst[100] = { 0 };
int a = 10;
char src[] = "hello world";
printf("a = %d, src = %s", a, src);
printf("\n");
int len = sprintf(dst, "a = %d, src = %s", a, src);
printf("dst = \" %s\"\n", dst);
printf("len = %d\n", len);

13. int sscanf(const char *str, const char *format, ...);

#include<stdio.h>

功能:

  从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。

参数:

  str:指定的字符串首地址

  format:字符串格式,用法和scanf()一样

返回值:

  成功:参数数目,成功转换的值的个数

  失败: - 1

举例:

char src[] = "a=10, b=20";
int a;
int b;
sscanf(src, "a=%d, b=%d", &a, &b);
printf("a:%d, b:%d\n", a, b);

14. char *strchr(const char *s, intc);

#include<string.h>

功能: 在字符串s中查找字母c出现的位置。

参数:

  s:字符串首地址

  c:匹配字母(字符)

返回值:

  成功:返回第一次出现的c地址

  失败: NULL

举例:

char src[] = "ddda123abcd";
char *p = strchr(src, 'a');
printf("p = %s\n", p);

15. char *strstr(const char *haystack, const char *needle);

#include<string.h>

功能:

  在字符串haystack中查找字符串needle出现的位置。

参数:

  haystack:源字符串首地址

  needle:匹配字符串首地址

返回值:

  成功:返回第一次出现的needle地址

  失败: NULL

举例:

char src[] = "ddddabcd123abcd333abcd";
char *p = strstr(src, "abcd");
printf("p = %s\n", p);

16.size_t strspn(const char* str1, const char* str2)

#include<string.h>

功能

  用来计算str1字符串开始部分匹配str2字符串的字符个数

返回值

  返回字符串str1开头连续包含字符串str2内的字符数目。如果str所包含的字符都属于str2,那么返回str1的长度。如果str的第一个字符不属于str2,那么返回0

17.size_t strspn(const char* str1, const char* str2)

功能

  用来计算str1字符串开始部分不匹配str2字符串的字符个数

返回值

  返回字符串str1开头部分不出现在字符串str2内的字符数目。

18. char *strtok(char *str, const char *delim);

#include<string.h>

功能:

  来将字符串分割成一个个片段。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时, 则会将该字符改为\0 字符,当连续出现多个时只替换第一个为\0。

参数:

  str:指向欲分割的字符串

  delim:为分割字符串中包含的所有字符

返回值:

  成功:分割后字符串首地址

  失败: NULL

举例:

int main(void)
{
char input[16]="abc,d";
char*p;
/*strtok places a NULL terminator
infront of the token,if found*/
p=strtok(input,",");
if(p)
printf("%s\n",p);
/*Asecond call to strtok using a NULL
as the first parameter returns a pointer
to the character following the token*/
p=strtok(NULL,",");
if(p)
printf("%s\n",p);
return 0;
}

19. int atoi(const char *nptr);

#include<stdlib.h>

功能:

  atoi()会扫描 nptr字符串, 跳过前面的 空格字符,直到遇到 数字或 正负号才开始做 转换,而遇到 非数字或 字符串结束符('\0')才 结束转换,并将结果返回 返回值。

参数:

  nptr:待转换的字符串

返回值:

  成功:转换后整数

  类似的函数有:

  atof():把一个小数形式的字符串转化为一个浮点数。

  atol():将一个字符串转化为long类型

举例:

char str1[] = "-10";
int num1 = atoi(str1);
printf("num1 = %d\n", num1);
char str2[] = "0.123";
double num2 = atof(str2);
printf("num2 = %lf\n", num2);

20.long int strtol(const char *nptr,char **endptr,int base);;

#include<stdlib.h>

功能:

  strtol函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36。

参数:

  nptr:待转换的字符串

  endptr:是一个指针的地址,该指针被设置为标识输入数字结束字符的地址

  base:表示以什么进制写入数字

返回值:

  该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。

  类似的函数有:

  strtoul():把字符串转换成unsigned 1ong类型的值

  strtod():把字符串转换成double类型的值

举例:

#include<stdio.h>
#include<stdlib.h>
#define LIM 30
char *s_gets(char*st,int n); int main()
{
char number[LIM];
char *end;
long value;
puts("Enter a number(empty line to quit):");
while(s_gets(number,LIM)&&number[0]!='\0')
value=strtol(number,&end,10);/*十进制*/
printf("base 10 input,base 10 output:%1d,stopped at %s(%d)\n",value,end,*end);
value=strtol(number,&end,16);/*十六进制*/
printf("base 16 input,base 10 output:%1d,stopped at %s(%d)\n",value,end,*end);
puts("Next number:");
puts("Bye!\n");
return 0;
} char*s gets(char*st,int n)
{
char* ret_val;
int i=0;
ret val=fgets(st,n,stdin);
if (ret_val)
while (st[i]l='\n'&& st[i]!='\0')
i++;
if(st[i] =='\n')
st[i]='\0';
else
while (getchar()!='\n')
continue;
return ret_val;
}

下面是该程序的输出示例:

Enter a number(empty line to quit):

10

base 10 input,base 10 output:10,stopped at(0)

base 16 input,base 10 output:16,stopped at(0)

Next number:

10atom

base 10 input,base 10 output:10,stopped at atom(97)

base 16 input,base 10 output:266,stopped at tom (116)

Next number:

Bye!

  首先注意,当base分别为10和16时,字符串"10"分别被转换成数字10和16。还要注意,如果end指向一个字符,*end就是一个字符。因此,第1次转换在读到空字符时结束,此时end指向空字符。打印end会显示一个空字符串,以%d转换说明输出end显示的是空字符的ASCIl码。

  对于第2个输入的字符串,当base为10时,end的值是'a'字符的地址。所以打印end显示的是字符串“atom”,打印
end显示的是'a’字符的ASCIl码。然而,当base为16时,'a'字符被识别为一个有效的十六进制数,strtol()函数把十六进制数10a转换成十进制数266。

  strtol()函数最多可以转换三十六进制,'a'~'z'字符都可用作数字。strtoul()函数与该函数类似,但是它把字符串转换成无符号值。strtod()函数只以十进制转换,因此它值需要两个参数。

  许多实现使用itoa()和ftoa()函数分别把整数和浮点数转换成字符串。但是这两个函数并不是C标准库的成员,可以用sprintf()函数代替它们,因为sprintf()的兼容性更好。

  数字既能以字符串形式储存,也能以数值形式储存。把数字储存为字符串就是储存数字字符。例如,数字213以‘2’、’1’、3’、‘\0’的形式被储存在字符串数组中。以数值形式储存213,储存的是int类型的值。

  C要求用数值形式进行数值运算(如,加法和比较)。但是在屏幕上显示数字则要求字符串形式,因为屏幕显示的是字符。printf()和sprintf()函数,通过%d和其他转换说明,把数字从数值形式转换为字符串形式,scanf()可以把输入字符串转换为数值形式。C还有一些函数专门用于把字符串形式转换成数值形式。

  假设你编写的程序需要使用数值命令形参,但是命令形参数被读取为字符串。因此,要使用数值必须先把字符串转换为数字。如果需要整数,可以使用atoi()函数(用于把字母数字转换成整数),该函数接受一个字符串作为参数,返回相应的整数值。

字符分类函数

int isalnum(int c):检查字符是否为数字或字母;(0~9,a~z,A~Z)
int isalpha(int c):检查字符是否为字母;(a~z, A~Z)
int iscntrl(int c):检查字符是否为控制字符;(八进制000~037以及177的字符)
int isdigit(int c):检查字符是否为十进制数字;(0~9)
int isgraph(int c):检查字符是否为图形表示,依赖于使用语言的环境;0~9,a~z,A~Z,以及标点符号)
int islower(int c):检查字符是否为小写的字母;(a~z)
int isprint(int c):检查字符是否为可打印的;(数字、字母、标点符号、空白字符)
int ispunct(int c):检查字符是否为标点符号;(! ” # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~等)
int isspace(int c):检查字符是否为空白字符;(TAB、换行、垂直TAB、换页、回车、空格)
int isupper(int c):检查字符是否为大写字母;(A~Z)
int isxdigit(int c):检查字符是否为十六进制数字;(0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f)

字符转换

int tolower(int c):转化字符为小写字母;
int toupper(int c):转化字符为大写字母;

有任何问题,均可通过公告中的二维码联系我

C语言常用字符串操作函数整理(详细全面)的更多相关文章

  1. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  2. [转载]c++常用字符串操作函数

    原文地址:c++常用字符串操作函数作者:Valsun 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source ...

  3. mysql常用字符串操作函数大全,以及实例

    今天在论坛中看到一个关于mysql的问题,问题如下 good_id     cat_id12654         665,56912655         601,4722 goods_id是商品i ...

  4. c语言的字符串操作(比较详细)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  5. VB常用字符串操作函数

    1. ASC(X),Chr(X):转换字符字符码 [格式]: P=Asc(X) 返回字符串X的第一个字符的字符码 P=Chr(X) 返回字符码等于X的字符 [范例]: (1)P=Chr(65) ‘ 输 ...

  6. PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)

    /*常用的字符串输出函数 * * echo() 输出字符串 * print() 输出一个或多个字符串 * die() 输出一条信息,并退出当前脚本 * printf() 输出格式化字符串 * spri ...

  7. C语言字符串操作函数整理

    整理C语言字符串相关的函数,以程序方式验证,以注释方式做说明. #include<stdio.h> #include<string.h> #include<stdlib. ...

  8. js 数组常用的操作函数整理

    平时多做企业应用开发,抱着实用为主,对前端技术理解得比较肤浅,下面就是肤浅地对 js 数组的属性和方法及对它操作的 jquery 方法做些记录: js 数组是 js 内建的一个非常强大数据类型,由于 ...

  9. C语言的字符串操作函数小结

    一.strcat()函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾.它返回一个指向字符串de ...

  10. string常用字符串操作函数

    1.strdup和strndup 说明:strdup() 函数将参数 s 指向的字符串复制到一个字符串指针上去,这个字符串指针事先可以没被初始化.在复制时,strdup() 会给这个指针分配空间,使用 ...

随机推荐

  1. [ABC261D] Flipping and Bonus

    Problem Statement Takahashi will toss a coin $N$ times. He also has a counter, which initially shows ...

  2. 2023第八届上海市大学生网络安全大赛-磐石行动(misc+crypto) WP

    Crypto bird 题目 docx文档出现: 我的解答: 使用在线工具即可:https://www.dcode.fr/birds-on-a-wire-cipher flag{birdislovel ...

  3. React Hooks 钩子特性

    人在身处逆境时,适应环境的能力实在惊人.人可以忍受不幸,也可以战胜不幸,因为人有着惊人的潜力,只要立志发挥它,就一定能渡过难关. Hooks 是 React 16.8 的新增特性.它可以让你在不编写 ...

  4. 在灾难推文分析场景上比较用 LoRA 微调 Roberta、Llama 2 和 Mistral 的过程及表现

    引言 自然语言处理 (NLP) 领域的进展日新月异,你方唱罢我登场.因此,在实际场景中,针对特定的任务,我们经常需要对不同的语言模型进行比较,以寻找最适合的模型.本文主要比较 3 个模型: RoBER ...

  5. P3537 [POI2012]SZA-Cloakroom 题解

    题目大意 有 \(n\) 件物品,每件物品有三个属性 \(a_i, b_i, c_i (a_i < b_i)\). 再给出 \(q\) 个询问,每个询问由非负整数 \(m, k, s\)组成,问 ...

  6. springboot的启动器

    前言 ~ 面试的时候,被问到springboot 官方提供的启动器常见的有哪些?(头大) 正文 ~ 启动器作用: 启动器是为了 适应 一个特定的场景的,里面定义了 这个场景下 需要用到的依赖. 启动器 ...

  7. Java面试必考:什么是字节码?采用字节码的好处?

    Java面试必考:什么是字节码?采用字节码的好处? 于哥你好,最近在java面试中被问答到什么是字节码?采用字节码的好处是什么?瞬间懵了,如果你连这个都不知道,我保证你面试GG! 首先说下Java的优 ...

  8. VSCode C++开发环境配置:CMake 调试配置 launch.json

    相关内容 VSCode C++开发环境配置: LLVM clang clangd 安装 cmake sudo apt install cmake 安装 VSCode 插件 CMake CMakeToo ...

  9. Visual Studio 2022 Preview设置简体中文

    前言: 作为尝鲜小分队队长,对于vs的升级版Visual Studio 2022 Preview肯定也开始用上了,不过之前一直以为还没有出中文的语言包所以一直用的是英文版的,搞得英文本来不好的我很是不 ...

  10. Java 设置Excel页面背景

    本文介绍通过Java 程序在Excel表格中设置页面背景的方法,可设置颜色背景(即指定单一颜色作为背景色).图片背景(即加载图片设置成页面背景).程序中需要使用免费版Excel类库工具 Free Sp ...