入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

C语言实现strlen()4种方法和strcat()3种方法

创建时间:2014-11-07 投稿人: 浏览次数:1320
//当然strlen和strcat函数可以用汇编来编译,因为有时CPU提供了字符串处理的指令,这样就会高效些。
#include <stdio.h>
#include <assert.h>
#if 0
// 默认使用法4
// 法1 
int strlen(const char* str)
{
	int n;
//	const char *p = str; //测试这句,这个语句不需要,因为我实参是指针,形参指针改变指向不影响实参指向 
	for(n = 0; *str != ""; n++)	
	{
		str++;
	}
	return n;
}
#elif 0
// 法2 
int strlen(const char* str)
{
	int n = 0;
	for(; *str++; n++);
	return n; 	
} 
#elif 0
// 法3 
int strlen(const char* str)
{
	int n = 0;
	while(*str++) 
	{
		n++;	
	}
	return n;
}
#else
// 法4 
int strlen(const char* str) 
{
	const char *p =str;
	while(*str)//写成while(*str++)不行(因为在return时候str又加加了,会多加1),必须写成当前代码 ,
		str++; 
	return str-p;	
}
#endif
 
#if 0
char* strcat(char* str1, const char* str2)
{
	 assert((str1!=NULL)&&(str2!=NULL));
//	if((str1==NULL)||(str2==NULL)) throw "Invalide arguments!";
	char *p = str1;
	while(*p != "")
 		p++;
	while(*str2 != "")  
	{
		*p = *str2;//这里发生错误 
		p++;
		str2++;
	}
	*p = "";
	return str1;
}
#elif 0
char* strcat(char* str1,const char* str2)
{
	 assert((str1!=NULL)&&(str2!=NULL));
	//if((str1==NULL)||(str2==NULL)) throw "Invalide arguments!";
	char *p = str1;
	while(*p)// 写成while(*p++)错误,原因如上 
		p++; 
	while(*p++ = *str2++);
	return str1;
}
#else
char *strcat(char *dst, char *src)
{
    size_t dst_len = strlen(dst);
    int i;

    for (i = 0; src[i] != ""; i++)
        dst[dst_len + i] = src[i];
        
   	dst[dst_len + i] = "";

    return (dst);
}
#endif

int main(int argc, char **argv)
{
	/* s最好足够大,否则溢出,这里可以通过编译和运行,但别这么做 */
	char s1[] = "ab"; //使用char * = "ab",*s3 = "cde";发生段错误 
	char s2[] = "cde";
	int len;
	
	strcat(s1,s2);
    len = strlen(s1);
    
	printf("s1 = %s
",s1);
	printf("len = %d
",len);
	
	return 0;
}

输出:


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。