c语言字符串处理

相关的函数

strchr   字符匹配函数
strstr   字符串匹配
memset   内存空间填充函数
atoi/atol/atof  字符串转换
strtok    字符串分割

1.strchr字符匹配函数

在参数 str 所指向的字符串中搜索第一次出现字符c(一个无符号字)的位置。

char *strchr(const char *str, int c)  

参数说明:
str – 要被检索的 C 字符串。
c – 在 str 中要搜索的字符。
返回值
该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL。

2.strstr字符串匹配

在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。

char *strstr(const char *haystack, const char *needle) 

返回值 该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 NULL。

3.memset内存空间填充函数

用常量字节c填充s所指向的内存区域str的前n个字节。

void *memset(void *str, int c, size_t n);

参数说明
str – 指向要填充的内存块。
c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
n – 要被设置为该值的字符数。
返回值
该值返回一个指向存储区 str 的指针。

4.atoi/atol/atof转换

a是ascii的意思

1.把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

int atoi(const char *str)   

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

2.把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。

long int atol(const char *str) 

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

3.把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。

double atof(const char *str) 

函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。

5.strtok

将一个字符串分解为一个由零或多个非空标记组成的序列。在第一次调用strtok()时,要解析的字符串应该在str中指定,在接下来的每次调用中,要解析相同的字符串,str必须为NULL。delim 为分隔符(可为多个)。

char *strtok(char *str, const char *delim)   

str – 要被分解成一组小字符串的字符串。
delim – 包含分隔符的 C 字符串。 返回值
该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。

实质:将出现分隔符位置的字符改为 ‘\0’
第二次及以后调用 传NULL。
例如:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char str[] = "hello-world";
    char *buf;

    buf = strtok(str, "-");
    cout << buf << endl;

    buf = strtok(NULL, "-");
    cout << buf << endl;
}

运行结果:
在这里插入图片描述

6.sprintf(组包)

按格式写入 str 所指向的字符串。

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

str – 这是指向一个字符数组的指针,该数组存储了字符串。
format – 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
format 标签属性是 %[flags][width][.precision][length]specifier

如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
例如:

 sprintf(buf,"%d年%d月%d日",year,month,day);

7.sscanf(解包)

从字符串格式化读取输入。

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

str – 这是字符串,是函数检索数据的源。
format – 这是字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。
format 说明符形式为 [%[*][width][modifiers]type=]
返回值
如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

例如:

  char a[] = "2020year5month3day";   //从该字符串中得到年月日
  int y, m, d = 0;
  int g=sscanf(a,"%dyear%dmonth%dday",&y,&m,&d);

如果提取字符串,需注意遇到’\0’才停止。
一、
高级用法1: 使用%*s、%*d舍弃提取的字符串、整型内容
高级用法2: 使用%[n]s、%[n]d提取指定宽度n的字符串或数字
二、
%[a-z]表示按 提取 a-z的字符串 [ABC]提取ABC
三、
%[^ABC]不是ABC的都要
例如:

    char buf[16] = {0};
    char buf2[16] = {0};
    char buf3[16] = {0};
    int size = sscanf("y12346@dadaa.com", "%[^@]%*1s%[^.]%*1s%s", buf, buf2, buf3);

    cout << buf << endl<< buf2 << endl << buf3 << endl;

结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值