收费报名网站怎么做,国泰君安建设工程官方网站,wordpress模板 古典,天门市住房和城乡建设网站目录 一.常用字符串函数介绍
1.strlen
2. strcpy
3.strcmp
4.strcat
5.strstr
二.模拟实现常用字符串函数 1.strlen
2.strcpy
3.strcmp
4.strcat
5.strstr 一.常用字符串函数介绍
1.strlen 字符串strlen是用来求字符串长度的#xff0c;我们可以打开cpp网站查看有关…
目录 一.常用字符串函数介绍
1.strlen
2. strcpy
3.strcmp
4.strcat
5.strstr
二.模拟实现常用字符串函数 1.strlen
2.strcpy
3.strcmp
4.strcat
5.strstr 一.常用字符串函数介绍
1.strlen 字符串strlen是用来求字符串长度的我们可以打开cpp网站查看有关信息 该函数用来求字符串长度求的是‘\0’之前字符的个数函数参数为字符指针因为该函数不需要修改字符串的值故为了保护字符串被意外修改设置为只读所以在参数字符指针用const修饰返回值即为字符串的长度 下面以经典helloworld字符串为例 输出结果 字符串arr1为“helloworld”,一个10个字符该字符串长度则为10输出结果正确 2. strcpy 字符串函数strcpy是用来拷贝字符串的即将一个字符串的内容拷贝到另一个字符串中而且会将该字符的\0也拷贝到另一个字符串中我们打开cpp网站查看该函数的有关信息 该函数的参数为两个字符指针一个指向目标字符串一个指向源字符串由于只需要修改目标字符串故用const修饰源字符串以防止误修改函数返回值是目标字符串的首地址
下面以经典helloworld字符串为例 输出结果 可以看到我们将arr2中的helloworld成功地拷贝到了arr1中但特别值得注意的是当目标字符串空间不够时强行拷贝比空间更大的字符串虽然也可以输出结果但毕竟是越界访问会引发一些不可估计的问题如将本例的arr1大小由10改为5 可以看到程序运行后虽然正常地打印出了结果但是程序出错了 3.strcmp 字符串函数strcmp函数是用来比较两个字符串大小的但是并不是比较两个字符串的大小而是比较字符串的内容如果第一个字符串小于第二个字符串则返回一个小于0的值大于则返回一个大于0的值等于则返回0如“hello”和“hellz”前面的字符都相等‘o’小于‘z’故hello小于“hellz”,如“hellx”和hella前面的字符都相等x大于a所以“hellx”大于“hella” 打开cpp网站查看该函数的相关信息 该函数的参数为两个字符指针由于比较不需要修改字符串所以两个参数都用const修饰以防误修改 返回值为int型比较的结果为小于则为小于0的值大于则为大于0的值等于则为0
下面以经典的helloworld字符串为例 输出结果 arr1小于arr2故输出的结果为-1arr3大于arr4故输出的结果为1arr5等于arr6故输出的结果为0 4.strcat 字符串函数strcat是用来连接两个字符串的即将源字符串连接到目标字符串后面连接的步骤是先找到目标字符串的末尾‘\0’然后再进行拷贝所以与strcpy的区别就在于要从目标字符串的末尾开始拷贝 打开cpp网站查看该函数的相关信息 该函数的参数为两个字符指针由于源字符串不需要修改故加上const修饰以防误修改返回值为连接后的字符串的地址即目标字符串的地址 下面以经典的helloworld字符串为例 输出结果 可以看到我们成功地将arr2的“world”连接到arr1的“hello”中于是arr1便变成了“helloworld”与拷贝函数类似特别值得注意的是目标字符串要有足够大的空间否则强行连接的话会出现一些未知的错误 我们将上例的arr1的大小改为8 输出结果 可以看到虽然正常输出了但是程序报错了 5.strstr 字符串函数strstr是查找函数在字符串中查找子串并返回子串在字符串第一次出现的地址如果找不到子串则返回NULL 打开cpp网站查看该函数的相关信息 该函数的参数为两个字符指针。由于查找并不需要修改两个字符串的内容所以两个字符指针都用const修饰返回值为子串在字符串中第一次出现的地址
下面以经典的helloworld字符串为例 输出结果 可以看到“llo”可以在“helloworld”中找到并返回指向“llo”’的地址将改地址用%s打印则从llo开始打印 即为lloworld 二.模拟实现常用字符串函数 1.strlen my_strlen模拟实现库函数strlen。参数为const char *,返回值为int型即为字符串的长度利用遍历字符串的方法直到‘\0’结束遍历
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestring.h
int my_strlen(const char* str)
{int len 0;//定义长度初始化为0while (*str ! \0)//从头开始遍历字符串直到\0结束{len;str;}return len;//返回字符串的长度
}
int main()
{char arr1[] helloworld;int ret my_strlen(arr1);printf(%d, ret);return 0;
} 2.strcpy 利用my_strcpy模拟实现库函数strcpy依次赋值直到源字符串遍历到\0结束赋值并返回预留的目标字符串的地址
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestring.h
char* my_strcpy(char* str1, const char* str2)
{char* p str1; //定义一个p指针保存str1,以便函数结束时返回while (*str1 *str2)//依次赋值直到*str2为\0结束{str1;str2;}return p;//返回预留的指针P
}
int main()
{char arr1[20] {0};char arr2[] helloworld;char *str my_strcpy(arr1,arr2);printf(%s, str);return 0;
} 3.strcmp 利用my_strcmp函数模拟实现库函数strcmp,依次遍历比较如果遇到不相等的情况则直接return返回如果两个字符串相等则遍历到\0再返回0
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestring.h
int my_strcmp(const char* str1, const char* str2)/*要是不相等下面的return会结束循环
要是相等则遍历到\0才结束*/
{while (*str1 ! \0 || *str2 ! \0){if (*str1 *str2) //小于则返回-1return -1;else if (*str1 *str2)//大于则返回1return 1;else if (*str1 *str2)//相等则继续比较后面的字符{str1;str2;}}return 0;//只有相等才会执行到这一步即相等返回0
}
int main()
{char arr1[] helloworla;char arr2[] helloworld;int ret my_strcmp(arr1,arr2);printf(%d, ret);return 0;
} 4.strcat 利用my_strcat函数模拟实现库函数strcat先找到目标字符串的末尾‘\0’然后从\0处依次赋值直达遍历到源字符串的末尾\0
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestring.h
char* my_strcat(char* str1, const char* str2)
{char* p str1;//保存连接字符串的地址以便函数结束时返回while (*str1 ! \0)//遍历找到str1的\0处{str1;}while (*str1 *str2)//从str1的\0处依次赋值直到遍历到str2的\0结束{str1;str2;}return p;//返回连接后字符串的地址
}
int main()
{char arr1[20] hello;char arr2[] world;char *str my_strcat(arr1,arr2);printf(%s, str);return 0;
}5.strstr 利用my_strstr函数模拟实现库函数strstr设置两个指针分别指向两个字符串再设置一个指针P指向当前开始比较的字符的位置直到遍历到子串的\0位置则已找到子串并返回子串的位置循环节后仍咩没有找到子串则说明找不到子串返回NULL
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestring.h
char* my_strstr(const char* str1, const char* str2)
{const char* s1 str1;//定义s1指向第一个字符串const char* s2 str2;//定义s2指向第二个字符串const char* p str1;//定义p指向第一个字符串当前开始比较的字符while (*p){s1 p; //从p处开始比较s2 str2;//从头开始比较while (*s1 ! \0 *s2 ! \0 *s1 *s2)//判断遍历字符是否相等{s1;s2;}if (*s2 \0)//如果是因为*s2为\0结束则证明找到子串返回子串的位置return p;p;//一轮比较后没有找到子串则从下一个字符开始比较}return NULL;
}
int main()
{char arr1[] helloworld;char arr2[] llo;char *str my_strstr(arr1,arr2);printf(%s, str);return 0;
}