- 1.求字符串长度函数
- strlen的用法和模拟实现
- 2.长度不受限制的字符串函数
- strcpy
- strcat
- strcmp
- 3.简单介绍长度受限制的字符串函数
- strncpy
- strncat
- strncmp
- 4.字符串查找函数
- strstr
- strtok
- 5.错误信息报告函数
- strerror
strlen()函数:该函数从第一个字符开始计算字符串中字符数,直到遇到空字符即’ ’为止,然后返回计算字符数的长度,包括’ ’。
接下来我们利用MSDN 来查看一下strlen函数的实际应用方法:
注意:由上面我们可以知道strlen函数的返回类型:size_t(无符号整型)
具体用法::接下来我们来尝试一下实现一个简单的strlen函数:
头文件:#include “string.h”
#include#include int main() { char arr[] = "abccd"; printf("%d", strlen(arr)); return 0; }
知道了strlen函数的用法和原理之后,我们自己也来尝试做一个和strlen函数具有一样用途的函数。
模拟实现如下:
#include2.长度不受限制的字符串函数 strcpy#include #include size_t my_str(char* arr) { int count = 0; assert(arr != NULL); while (*arr++) { count++; } return count; } int main() { char arr[] = { "aabcdefwcng" }; int num = my_str(arr); printf("%dn", num); return 0; }
具体用法::
头文件:#include “string.h”
#include#pragma warning(disable:4996) #include int main() { char a[20], c[] = "I am a student!"; strcpy(a, c); printf(" c=%sn", c); printf(" a=%sn", a); return 0; }
知道了strcpy函数的用法和原理之后,我们自己也来尝试做一个和strcpy函数具有一样用途的函数。
模拟实现如下:
#include#include void my_strcpy(char* dest, const char* src) { assert(src != NULL); assert(dest != NULL); while (*dest++ = *src++) { ; } } int main() { char arr1[] = "abcdef"; char arr2[10] = "xxxxxxxxxxx"; my_strcpy(arr2, arr1); printf("%sn", arr2); return 0; }
注意:
1.源字符串必须以 ‘ ’ 结束。
2.会将源字符串中的 ‘ ’ 拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可变
对于strcat函数,其实就是把又一个字符串加在了前一个字符串的后面,用的时候注意被加入的空间要足够大,不能追加之后就溢出;
从MSDN上我们可以看出来strcat和strcpy的使用方法非常类似,它们都具有同样的参数布局方式和返回类型
具体用法:
头文件:#include “string.h”
#include#include #pragma warning(disable:4996) int main() { char a[30] = "zhoumin is "; char b[] = "a good girl!"; printf("%s",strcat(a, b)); return 0; }
知道了strcat函数的用法和原理之后,我们自己也来尝试做一个和strcat函数具有一样用途的函数。
模拟实现如下:
#include#include char* MyStrcat(char* dest, const char* src) { char* ret = dest; assert(dest != NULL); assert(src != NULL); while (*dest) { dest++; } while ((*dest++ = *src++)) { ; } return ret; } int main() { char str[20] = "Hello"; printf("%sn", MyStrcat(str, " my girl")); return 0; }
注意:
1.源字符串必须以 ‘ ’ 结束。
2.目标空间必须有足够的大,能容纳下源字符串的内容。
3.目标空间必须可修改。
作用:比较a,b两个字符串,strcmp函数是根据ASCII码来比较两个字符串的。用a字符串的第一个字符减去b字符串的第一个字符,若第一个字符相等,则对比第二个字符,若a,b完全相等,则返回0,继续比较后面的字符大小;若a大于b,则返回大于0的数值;若a小于b,同样返回小于0的数值
具体用法::
头文件:#include “string.h”
#include#include int main() { const char* str1 = "abcd"; const char* str2 = "abdc"; int xx = strcmp(str1, str2); printf("%d", xx); return 0; }
知道了strcmp函数的用法和原理之后,我们自己也来尝试做一个和strcmp函数具有一样用途的函数。
模拟实现如下:
#include3.简单介绍长度受限制的字符串函数#include #include int my_strcmp(char* str1, char* str2) { assert(str1); assert(str2); while (*str1 == *str2) { if (*str1 == ' ' || (*str2 = ' ')) return 0; str1++; str2++; } return *str1 - *str2; } int main() { char str[32] = "bcdefg"; char buf[32] = "bcdefg"; char erc[32] = "abcdeg"; char std[32] = "cdafgh"; printf("%dn", my_strcmp(str, buf)); printf("%dn", my_strcmp(str, erc)); printf("%dn", my_strcmp(str, std)); system("pause"); return 0; }
上面给大家介绍的都是长度不受限制的字符串函数,但是其实使用长度受限制的字符串函数相比于不受限制要安全很多,在可以的情况下,我还是希望大家更严谨的选择长度受限制的字符串函数。
用通俗简单的话来讲:其实长度受限制的字符串函数就是在每一个函数的中间加入一个n(str后面),在使用函数的时候限制了你要(cpy)(cat)(cmp)的具体个数,相应的在使用该函数的时候也多了一个参(size_t 类型)
功能:拷贝num个字符从源字符串到目标空间
头文件:#include “string.h”
具体用法::
#define _CRT_SECURE_NO_WARNINGS 1 #includestrncat#include #include int main() { char str1[256] = { 0 }; char str2[] = "abcdefgh"; strncpy(str1, str2, 7); printf("%sn", str1); system("pause"); return 0; }
功能:strncat()将会从字符串src的开头拷贝n 个字符到dest字符串尾部,dest要有足够的空间来容纳要拷贝的字符串。如果n大于字符串src的长度,那么仅将src指向的字符串内容追加到dest的尾部。strncat()会将dest字符串最后的’ ’覆盖掉,字符追加完成后,再追加’ ’。
头文件:#include “string.h”
具体用法::
#define _CRT_SECURE_NO_WARNINGS 1 #includestrncmp#include int main() { char str1[256] = "abcdefg"; char str2[] = "higklmn"; strncat(str1, str2, 5); printf("%sn", str1); return 0; }
功能:功能是把 arr1 和 arr2 进行比较,最多比较前 n 个字节,若arr1与arr2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。
注意:
arr1-- 要进行比较的第一个字符串
arr2-- 要进行比较的第二个字符串。
n-- 要比较的最大字符数。
返回值:
如果返回值 < 0,则表示 arr1 小于 arr2。
如果返回值 > 0,则表示 arr2 小于 arr1。
如果返回值 = 0,则表示 arr1 等于 arr2。
具体用法::
#define _CRT_SECURE_NO_WARNINGS 1 #include4.字符串查找函数 strstr#include int main() { char arr1[] = "abcd"; char arr2[] = "abcefgh"; int a=strncmp(arr1, arr2, 4); printf("%d", a); return 0; }
可能很多人都忽略掉了这个我认为非常实用的函数strstr(str1,str2) 函数是字符串处理函数之一,位于头文件 “string.h”中。对于处理字符串的一些问题有很大的帮助。
定义:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
给大家举一个例子:
char arr1[]=“abcdef”;
char arr2[]=“cd”;
则通过函数将返回c的地址,在打印时从首地址开始’ ’截至
将会打印cdef,如果找不到的话返回空指针NULL
具体用法::
#includestrtok#include #include int main() { char arr1[] = "hello world "; char arr2[] = "llo w"; char* g = strstr(arr1, arr2);//函数调用 printf("%s", g); return 0; }
定义
分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。在头文件#include
char * strtok ( char * str, const char * sep );
sep参数是个字符串,定义了用作分隔符的字符集合
第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标
记。
strtok函数找到str中的下一个标记,并将其用 结尾,返回一个指向这个标记的指针。(注:
strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容
并且可修改。)
strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串
中的位置。
strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标
记。
如果字符串中不存在更多的标记,则返回 NULL 指针。
具体用法::
#include5.错误信息报告函数 strerror#include #pragma warning(disable:4996) int main(void) { char str[12] = "hello,world "; char* token = strtok(str, ","); while (token != NULL) { printf("%sn", token); token = strtok(NULL, ","); } return 0; }
功能:通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述。首先,系统会根据上一条语句的执行错误情况,将errno赋值.。关于这点,我们首先明白两点。第一,errn是一个系统变量,是不需要我们赋值或者声明的。第二,errn是一个int类型的变量,而且其中的值对应一种特定错误类型
然后,关于streorror()本身,可以这么理解。顾名思义,streorror=string+error,就是将errno值翻译成描述错误类型的string语句!
参数:
errnum:最新的错误标号。
返回值:
指向错误信息的指针。
到这就全部给大家介绍完了
总算完成了这篇万字博客,过程还是挺累的,但是老知识重新回顾的感觉还是挺不错的,又收获到了许多新的理解。



