提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
字符串函数(续)
https://blog.youkuaiyun.com/weixin_74239807/article/details/137812748
一、strtok
● sep参数是个字符串,定义了用作分隔符的字符集合。
● 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标
记。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "csdn@yeah.net";
char buf[30] = { 0 };
strcpy(buf, arr); //将数据拷贝一份,处理arr数组的内容
const char* p = "@."; //多个分隔符:@ 和 .
char* str = NULL;
for (str = strtok(buf, p); str != NULL; str=strtok(NULL, p)) //循环实现
printf("%s\n", str);
return 0;
}
● strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:
strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容
并且可修改。)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "192.168.3.212";
char buf[30] = {0};
strcpy(buf, arr);
const char* p = ".";
char* str = strtok(buf, p);
printf("%s\n", str);
return 0;
}
● strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串
中的位置。
● strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标
记。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "192.168.3.212";
char buf[30] = {0};
strcpy(buf, arr);
const char* p = ".";
char* str = strtok(buf, p);
printf("%s\n", str);
//实现继续分割原字符串
str = strtok(NULL, p);
printf("%s\n", str);
str = strtok(NULL, p);
printf("%s\n", str);
str = strtok(NULL, p);
printf("%s\n", str);
return 0;
}
● 如果字符串中不存在更多的标记,则返回 NULL 指针。
二、strerror
-- (返回错误码,所对应的错误信息)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{
char* p = strerror(0);
printf("%s\n", p);
p = strerror(1);
printf("%s\n", p);
p = strerror(2);
printf("%s\n", p);
p = strerror(3);
printf("%s\n", p);
return 0;
}
这里需要注意一下:
所以输出的内容其实不是strerror(0)、strerror(1)、strerror(2)里面的0、1、2,而是errno里面的值。
举例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{
//打开文件
//打开文件的时候,如果文件的打开方式是"r"
//文件存在则打开成功,文件不存在打开失败
//打开文件失败的话,会返回NULL
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
printf("打开文件失败,原因是:%s\n", strerror(errno));
return 1;
}
//读写文件
//...
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
三、字符分类函数
函数 | 如果他的参数符合下列条件就返回真 |
---|---|
iscntrl | 任何控制字符 |
isspace | 空白字符:空格‘ ’,换页‘\f’,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v’ |
isdigit | 十进制数字 0~9 |
isxdigit | 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A-F |
islower | 小写字母a~z |
isupper | 大写字母A~Z |
isalpha | 字母a-z或A~Z |
isalnum | 字母或者数字,a-zz,A~Z,0-9 |
ispunct | 标点符号,任何不属于数字或者字母的图形字符(可打印) |
isprint | 任何可打印字符,包括图形字符和空白字符 |
isgraph | 任何图形字符 |
四、字符转换
int tolower ( int c );
int toupper ( int c );
总结
以上就是今天要讲的内容,本文仅仅简单续接前天的字符串函数。