1.strlen();
函数介绍(得到字符串的长度):
int strlen(const char *s);
形参:字符串首地址
返回值:字符串长度
内部实现:
int strlen(const char *s)
{
int len = 0;
while(*s++ != '\0')
{
len++;
}
return len;
}
2.strcmp();
函数介绍(比较两字符串的大小):
int strcmp(char *s1,char *s2);
形参:两段字符串的首地址
返回值:若s1>s2,返回一个正值;
若s1==s2,返回0;
若s1<s2,返回一个负值;
内部实现:
int strcmp(char *s1,char *s2)
{
int ret = 0;
while (!(ret = *s1 - *s2) && *s2)
{
++s1;
++s2;
}
if (ret < 0)
{
ret = -1;
}
else if (ret > 0)
{
ret = 1;
}
else
{
ret = 0;
}
return ret;
}
3.strncmp();
函数介绍(比较两个字符串前n个字符的大小):
int strncmp(const char *s1,const char *s2,int n)
形参:前面两个形参是待比较的两个字符串首地址,第三个形参是想要前n个字符;
返回值:同strcmp()函数,只不过比较的是前n个字符而已;
内部实现:
int strncmp(const char *s1,const char *s2,int n)
{
int ret = 0;
while(n && !(ret = *s1 - *s2) && *s2)
{
++s1;
++s2;
--n;
}
if (ret < 0)
{
ret = -1;
}
else if (ret > 0)
{
ret = 1;
}
else
{
ret = 0;
}
return ret;
}
4.strcpy();
函数介绍(将一个字符串拷贝给另一个字符串):
char* strcpy(char *dest,const char *src)
形参:两字符串的首地址,将src当中的内容拷贝给dest
返回值:拷贝完成后字符串的首地址
内部实现:
char* strcpy(char *dest,const char *src)
{
if ( dest == NULL || src == NULL)
return NULL;
if ( dest == src)
return dest;
char *temp = dest;
while(*src != '\0')
{
*dest = *src;
dest++;
src++;
}
return temp;
}
5.strncpy();
函数介绍(拷贝前n个字符):
char* strncpy(char *dest,const char* src,int n);
形参:前两个同上一个函数,第三个参数是想要拷贝字符串的前n个字符
返回值:同上
内部实现:
char* strncpy(char *dest,const char* src,int n)
{
if ( dest == NULL || src == NULL)
return NULL;
if ( dest == src)
return dest;
char *temp = dest;
while(n &&*src != '\0')
{
*dest = *src;
dest++;
src++;
n--;
}
*dest = '\0';
return temp;
}
6.strcat();
函数介绍(将一段字符串连接到另一段字符串的后面):
char* strcat(char *dest,const char* src);
形参:两个字符串的首地址,将src字符串连接到dest后面;
返回值:返回连接后字符串的首地址
内部实现:
char* strcat(char *dest,const char* src)
{
if ( dest == NULL || src == NULL)
return NULL;
char *temp = dest;
while(*dest != '\0')
dest++;
while(*src != '\0')
{
*dest = *src;
src++;
dest++;
}
return temp;
}
7.strncat();
函数介绍(将一段字符串前n个字符连接到另一个字符串上):
char* strncat(char *dest,const char* src,int n);
形参:同上,第三个形参是前n个字符
返回值:同上;
内部实现:
char* strncat(char *dest,const char* src,int n)
{
if ( dest == NULL || src == NULL)
return NULL;
char *temp = dest;
while(*dest != '\0')
dest++;
while(n && *src != '\0')
{
*dest = *src;
src++;
dest++;
n--;
}
*dest = '\0';
return temp;
}
8.strstr();
函数介绍(在s1字符串中查找和s2相同的字符串):
const char *strstr(const char *s1, const char *s2);
形参:两个字符串的首地址
返回值:若查找到,返回s1中和s2中相同字符串的首地址
若没找到,返回NULL
内部实现:
const char *strstr(const char *s1, const char *s2)
{
const char *temp1;
const char *temp2 = s2;
while(*s1 != '\0')
{
temp1 = s1;
while(*s1 == *s2)
{
s1++;
s2++;
if(*s2 == '\0')
return temp1;
}
s1++;
s2 = temp2;
}
return NULL;
}
9.strchr();
函数介绍(在字符串s1中查找和字符ch相同的字符):
const char* strchr(const char *s1,char ch);
形参:一段字符串和要查找的字符
返回值:若找到,返回s1中和ch相等的那个字符的指针
若没找到返回NULL
内部实现:
const char* strchr(const char *s1,char ch)
{
const char *temp;
while(*s1 != '\0')
{
temp = s1;
if(*s1 == ch)
return temp;
s1++;
}
return NULL;
}
测试程序:
int main()
{
char p[] = "jjunku";
char q[] = "jjunmingyue";
char m[] = "min";
// printf("%d\n",strlen(p));
// printf("%d\n",strncmp(p,q,5));
// printf("%d\n",strncmp(p,q,6));
// printf("%s\n",strcpy(q,p));
// printf("%s\n",strncpy(q,p,2));
// printf("%s\n",strcat(q,p));
// printf("%s\n",strncat(q,p,2));
printf("%s\n",strstr(q,m));
printf("%s\n",strchr(p,'u'));
return 0;
}