您的位置:首页 > 编程语言 > C语言/C++

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

2014-11-07 23:39 513 查看
//当然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 != '\0'; 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 != '\0')
p++;
while(*str2 != '\0')
{
*p = *str2;//这里发生错误
p++;
str2++;
}
*p = '\0';
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] != '\0'; i++)
dst[dst_len + i] = src[i];

dst[dst_len + i] = '\0';

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\n",s1);
printf("len = %d\n",len);

return 0;
}

输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 strcat strlen