安徽建设厅网站地址,关于网站开发的期刊,腾讯云网站搭建,知名品牌设计logo解析字符串函数
cplusplus.com/reference/cstring/
更多没有总结到的函数大家可以自行查阅
这篇文章只是把最需要知道的函数做一个总结 strlen
size_t strlen ( const char * str );字符串已经 ‘\0’ 作为结束标志#xff0c;strlen函数返回的是在字符串中 ‘\0’ 前面出现的…字符串函数
cplusplus.com/reference/cstring/
更多没有总结到的函数大家可以自行查阅
这篇文章只是把最需要知道的函数做一个总结 strlen
size_t strlen ( const char * str );字符串已经 ‘\0’ 作为结束标志strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数不包 含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意函数的返回值为size_t是无符号的学会strlen函数的模拟实现
#include stdio.h
int main()
{const char*str1 abcdef;const char*str2 bbb;if(strlen(str2)-strlen(str1)0){printf(str2str1\n);} else{printf(srt1str2\n);}return 0;
}大家思考一下这个程序的运行结果是什么
因为返回的是无符号整型那么怎么能出来负数呢
一定要会模拟这个函数
int my_strlen(const char * str)
{int count 0;while(*str)//\0即为0假{count;str;}return count;
}strcpy char* strcpy(char * destination, const char * source );源字符串必须以 ‘\0’ 结束。会将源字符串中的 ‘\0’ 拷贝到目标空间。目标空间必须足够大以确保能存放源字符串。目标空间必须可变。学会模拟实现。
strcat 字符串追加
源字符串必须以 ‘\0’ 结束。目标空间必须有足够的大能容纳下源字符串的内容。目标空间必须可修改。字符串自己给自己追加可以吗
当然是不可以的字符串内容被修改无法找到\0程序会死循环
strcmp int strcmp ( const char * str1, const char * str2 );标准规定
第一个字符串大于第二个字符串则返回大于0的数字第一个字符串等于第二个字符串则返回0第一个字符串小于第二个字符串则返回小于0的数字
长度受限制字符串函数
相对更加安全strncpystrncatstrncmp 可以减小我们程序出现问题的可能大家有兴趣可以下去查一下 这些函数我们最好也尝试自己去实现
strncpy
cplusplus.com/reference/cstring/strncpy/
strncat
cplusplus.com/reference/cstring/strncat/
strncmp
cplusplus.com/reference/cstring/strncmp/
strstr查找子串
const char * strstr ( const char * str1, const char * str2 ); char * strstr (char * str1, const char * str2 );查找str1中是否有str2的字串
找到时返回char*指针指向字串头指针
找不到是返回空指针
/* strstr example */
#include stdio.h
#include string.h
int main ()
{char str[] This is a simple string;char * pch;pch strstr (str,simple);strncpy (pch,sample,6);puts (str);return 0;
} 需要学会实现
这个函数在数据结构中好像有过讲解以后会写文章详细讲解
strtok字符串切割
char * strtok ( char * str, const char * sep );str要分割的字符串第一次调用时传入需要分割的字符串后续调用时传入 NULL。delim分隔符即根据此字符集中的任何字符进行分割。
返回值
如果成功找到了分割后的片段则返回指向该片段的指针。如果找不到分隔符或者传入的字符串为空则返回 NULL。
注意
在第一次调用 strtok 时需要传入要分割的字符串并且在后续调用中传入 NULL。strtok 函数使用静态变量来保存上一次分割的位置因此不是线程安全的应当避免在多线程环境下使用。分割后的片段会修改原始字符串将分隔符替换为 NULL因此在使用返回的片段时要注意不要修改原始字符串。如果要分割多个字符串建议使用 strtok_r 函数它是 strtok 的线程安全版本。
可以看一下演示
#include stdio.h
#include string.hint main() {char str[] Hello,world,this,is,a,test;char *token strtok(str, ,);while (token ! NULL) {printf(%s\n, token);token strtok(NULL, ,);}return 0;
}以上示例将会输出
Hello
world
this
is
a
test这里将字符串按照逗号分割成了多个片段并依次输出每个片段。
奇奇怪怪的函数
strerror 这个函数就比较有意思了 char * strerror ( int errnum );返回错误码所对应的错误信息。 /* strerror example : error list */
#include stdio.h
#include string.h
#include errno.h//必须包含的头文件
int main ()
{FILE * pFile;pFile fopen (unexist.ent,r);if (pFile NULL)printf (Error opening file unexist.ent: %s\n,strerror(errno));//errno: Last error numberreturn 0;
}
Edit Run这个函数是什么意思呢在C语言的函数库中函数执行出现异常会自动返回错误码而这个错误码会自动存储在全局变量
errno这个变量中这个变量是C语言自动创建的而strerror就可以去解读这个错误码
帮我们找到程序异常发生的原因
字符分类函数
函数如果他的参数符合下列条件就返回真iscntrl任何控制字符isspace空白字符空格‘ ’换页‘\f’换行’\n’回车‘\r’制表符’\t’或者垂直制表符’\v’isdigit十进制数字 0~9isxdigit十六进制数字包括所有十进制数字小写字母af大写字母AFislower小写字母a~zisupper大写字母A~Zisalpha字母az或AZisalnum字母或者数字az,AZ,0~9ispunct标点符号任何不属于数字或者字母的图形字符可打印isgraph任何图形字符isprint任何可打印字符包括图形字符和空白字符
isspace需要注意一下不仅仅是空白字符有一些转义字符也被认为是空白的
字符转换函数
int tolower ( int c );
int toupper ( int c );大写变小写或者小写变大写如果不是字母则不动
/* isupper example */
#include stdio.h
#include ctype.h
int main ()
{int i0;char str[]Test String.\n;char c;while (str[i]){cstr[i];if (isupper(c)) ctolower(c);putchar (c);i;}return 0;
}