一、字符串函数
1.strlen
size_t strlen(const char*str);
1.参数
str – 要计算长度的字符串
2.返回值
该函数返回字符串的长度(无符号整形)
3.结束条件
遇到‘\0’则停止,若无‘\0’则到最后打印随机值
以下是cplusplus的官方解释:
求字符串长度的,统计的是字符串中\0之前出现的字符个数
自我实现strlen函数:
#include <stdio.h>
#include <string.h>
#include<assert.h>
size_t my_strlen(const char*str){
assert(str);
const char*start=str;
const char*end=str;
while(*end){
end++;
}
return end-start;
}
2.strcpy
char * strcpy ( char * destination, const char * source );
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
1.参数
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src – 指向要追加的字符串,该字符串不会覆盖目标字符串。
2.返回值
该函数返回一个指向最终的目标字符串 dest 首地址的指针。
以下是cplusplus的官方解释:
strcpy是用来复制字符的,将source 指向的 C 字符串复制到destination指向的数组中,包括终止的空字符(并在该点停止)。
为避免溢出,destination指向的数组的大小应足够长,以包含与source相同的 C 字符串(包括终止的空字符),并且不应在内存中与source重叠。
自我实现strcpy函数:
#include <stdio.h>
#include <string.h>
#include<assert.h>
char *my_strcpy(char*dest,const char*src){
char*ret=dest;
assert(dest&&src);
while(*dest++=*src++);
return ret;
}
3.strcmp
int strcmp(const char *s1,const char *s2);
1.参数
>s1– 指向字符串的指针
s2– 指向字符串的指针
2.返回值
自左向右逐个按照ASCII码值进行比较,直到出现不同的字符或遇’\0’为止。
如果返回值 < 0,则表示 s1 小于 s2。
如果返回值 > 0,则表示 s1 大于 s2。
如果返回值 = 0,则表示 s1 等于 s2。
以下是cplusplus的官方解释:
此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或到达终止空字符。(比较ASCII值)
自我实现strcmp函数:
int my_strcmp(const char* s1, const char* s2) {
assert(s1&& s2);
while (*s1 == *s2) //如果值得ascii的值相等就进入循环,若不相等直接退出循环
{
if (*s1 == '\0')return 0;
s1++;
s2++;
}
return *s1 - *s2;//两个ascii的值得差
}
4.strcat
char* strcat(char* des, const char* sor)
strcat函数又被称为是字符串追加/连接函数,它的功能就是在一个字符串后面追加上另外一个字符串。
1.参数
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src – 指向要追加的字符串,该字符串不会覆盖目标字符串。
2.返回值
该函数返回一个指向最终的目标字符串 dest 首地址的指针。
将源字符串的副本附加到目标字符串。destination中的终止空字符被source的第一个字符覆盖,并且在destination中两者连接形成的新字符串的末尾包含一个空字符。(最终字符串和原字符不得重叠。)
自我实现strcat函数:
char* my_strcat(char* des, const char* sor) {
assert(des && sor);
char* ret = des;
while (*des)//先将dest指向末尾防止sor覆盖原数据
{
des++;
}
while (*des++ = *sor++);
return des;
}
5.strstr
char* strstr(const char* str1,const char* str2)
strstr()是一个参数为两个字符指针类型,返回值是char*类型的函数,它用于找到子串(str2)在一个字符串(str1)中第一次出现的位置。
1.参数
str1-- 指向目标数组,该数组包含了一个C字符串。
str2 – 指向要包含要匹配的字符序列的 C 字符串。。
2.返回值
指向str2中指定的整个字符序列的 第一次出现在str1中的指针,如果该序列不存在于str1中,则为空指针。。
返回指向 str1 中第一次出现str2的指针,如果str2不是 str1 的一部分,则返回空指针。 匹配过程不包括终止的空字符,但它会停在那里。
实例:
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "This is a simple string";
char* pch;
pch = strstr(str, "simple");
printf(pch);//simple string
return 0;
}
自我实现strstr函数:
const char* my_strstr(const char* s1, const char* s2) {
const char* t1 = s1;
const char* t2 = s2;
//实现挨个s1的字符,遍历s2
while (*s1) {
t1 = s1;
t2 = s2;
while (*t1 == *t2 && *t1 != '\0' && *t2 != '\0')//以便遇到连续s2的字符串,不连续则下个指向S1下个字符
{
t1++;
t2++;
}
if (*t2 == '\0')return s1;
s1++;
}
return NULL;
}