一、函数介绍
1.strlen
size_t strlen(const char* str);
- 字符串以’\0’作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的字符个数
- 参数指向的字符串必须要以’\0’结束
- 函数的返回值是size_t,是无符号的
#include<iostream>
#include<string>
using namespace std;
int my_strlen(string s)
{
size_t start=0;
size_t end=s.size()-1;
size_t count=0;
while(start<=end)
{
++count;
++start;
}
return count;
}
int main()
{
string s;
getline(sin,s)
cout<<my_strlen(s)<<endl;
return 0;
}
2.strcpy
char* strcpy(char* destination,const char* source);
- 源字符串必须以’\0’结束
- 会将源字符串的’\0’拷贝到目标空间
- 目标空间必须足够大,以确保能存放源字符串
- 目标空间必须可变
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* s1,const char* s2)
{
assert(s1);
assert(s2);
char* s3=s1;
while(*s1++=*s2++)
{
}
return s1;
}
int main()
{
char s1[]={"adnfuefb};
char s2[]={"jinu"};
my_strcpy(s1,s2);
printf("%s\n",s1);
}
3.strcat
char* strcat(char* destination,char* source);
- 源字符串必须以’\0’结束
- 目标空间必须足够大,能从容纳下源字符串内容
- 目标空间必须可修改
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* s1,const char* s2)
{
assert(s1);
assert(s2);
char* s3=s1;
while(*s1)
{
++s1;
}
while(*s1++=*s2++)
{
}
return s1;
}
int main()
{
char s1[]={"sdfadfrfr"};
char s2[]={"dfd"};
my_strcat(s1,s2);
printf("%s\n",s1);
return 0;
}
4.strcmp
int strcmp(const char* str1,const char* str2);
- 第一个字符串大于第二个字符串,返回大于0的数字
- 第一个字符串小于第二个字符串,返回0
- 第一个字符串小于第二个字符串,返回小于0的数字
#include<stdio.h>
#include<assert.h>
int my_strcmp(char* s1,char* s2)
{
assert(s1);
assert(s2);
int count1=0;
int count2=0;
while(*s1)
{
++count1;
++s1;
}
while(*s2)
{
++count2;
++s2;
}
if(count1<count2)
return -1;
else if(count1>count2)
return 1;
else
return 0;
}
int main()
{
char s1[]={"fgadg"};
char s2[]={"djbgag"};
printf("%d\n",my_strcmp(s1,s2));
}
5.strncpy
char* strncpy(char* destination,const char* source,size_t num);
- 拷贝num个字符从源字符串到目标空间
- 如果源字符串的长度小于num,则拷贝完字符串后,在目标的后边追加0,直到num个
6.strncmp
int strncmp(const char* str1,const char*str2,size_t num);
- 比较两个字符串到出现字符不一样货值一个字符串结束或者num个字符全部比较完