一个10分的strlen函数了,完美的版本为:
int strlen( const char *str ) //输入参数const,2分
{
assert( strt != NULL ); //断言字符串地址非0,3分
int len;
while( (*str++) != '\0' ) // 3分
{
len++;
}
return len;
}
不使用任何中间变量实现strlen
int NoMallocStrlen(const char *str)
{
if (str==NULL)
{
return 0;
}
if (*str != '/0')
{
return 1+NoMallocStrlen(++str);
}
else
return 0;
}
int main()
{
const char *p = "hello!";
int a = NoMallocStrlen(p);
if(a == strlen(p))
{
printf("NoMallocStrlen is well done!/n");
}
else
{
printf("Error!/n");
}
}
int my_strlen(const char*strDest)
{
}
strlen的函数原形如下:
size_t strlen(const char *str);
strlen返回str中字符的个数,其中str为一个以'\0'结尾的字符串(a null-terminated string)。
1. 简单实现
如果不管效率,最简单的实现只需要4行代码:
1 size_t strlen_a(const char * str) {
2 size_t length = 0 ;
3 while (*str++ )
4 ++ length;
5 return length;
6 }
也许可以稍加改进如下:
1 size_t strlen_b(const char * str) {
2 const char *cp = str;
3 while (*cp++ )
4 ;
5 return (cp - str - 1 );
6 }
下面几种实现strlen函数的源代码大家参考 -------------------------------------------------1:start------------------------------------
#include <stdio.h>
#include <assert.h>
typedef unsigned int u_int;
u_int Mystrlen(const char *str) {
u_int i;
assert(str != NULL);
for (i = 0; str[i]!= '\0'; i++);
return i;
}
------------------------------------------------1:end--------------------------------------
-------------------------------------------------2:start--------------------------------------
int strlen(const char *str) {
assert(str != NULL);
int len = 0;
while((*str++) != '\0')
len++;
return len;
}
------------------------------------------------2:end ------------------------------------------
------------------------------------------------3:start------------------------------------------
int strlen(const char *str) {
assert(str);
const char *p = str;
while(*p++!=NULL);
return p - str - 1;
}
-------------------------------------------------3:end-----------------------------------------
-------------------------------------------------4:start----------------------------------------
int strlen(const char *str) {
assert(str);
if (*str==NULL || *str=='\0')
return 0;
else
return (1 + strlen(++str));
}
-----------------------------------------------4:end----------------------------------------
以上各种实现的方式都是大同小异的,有的用的是变量,有的用的是指针。
其中,最后一个用的是递归的方式。其实,在实现库函数的时候,是规定不可以调用其他的库函数的,这里只是给大家一个方法,不用变量就可以实现strlen。