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

字符串训练(一)模拟实现strlen,strcmp,strcpy,strcat函数

2016-08-03 18:07 369 查看
1、模拟实现strlen函数(计数器实现,两个指针相减,递归实现)

//模拟实现strlen
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

//方法一:计数器实现
int  my_strlen1(const char * str)
{
int len = 0;
assert(NULL != str);
while (*str++ != '\0')
{
len++;
}
return len;

}
//方法二:两个指针相减
int  my_strlen2(const char * str)
{
const char *strbak = NULL;
assert(NULL != str);
strbak =  str;
while (*str++ != '\0')
{
NULL;
}           //while循环后str指向\0后面的那个字符。
return(str-1-strbak);

}

//方法三用递归实现。
int  my_strlen3(const char * str)
{

assert(NULL != str);
if ('\0' == *str )
{
return 0;
}
else
return (1+my_strlen3(str+1));

}

int main()
{
char array[20] = "abcdef";
printf("len = %d\n",my_strlen1(array));
printf("len = %d\n",my_strlen2(array));
printf("len = %d\n",my_strlen3(array));

printf("hello...\n");
system("pause");
return 0;
}




2、模拟实现strcpy函数

//模拟实现strcpy函数

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

char *mystrcpy(char *dest, const char *src)
{
char *destbak = NULL;

assert(NULL != dest && NULL != src);

/*while ('\0' != *src)
{
*dest++ = *src++;
}
*dest = '\0';*/   //可以简化成下面的形式

while ((*dest++ = *src++) )
{
NULL;
}
return destbak;
}

int main()
{
char array[100] = { 0 };
char *p = "abcdef";

mystrcpy(array, p);

printf("array = %s\n",array);
printf("hello...\n");
system("pause");
return 0;
}



3、模拟实现strcat函数

//模拟实现strcat函数

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

char * mystrcat(char *dest, const char *src)
{
char *destbak = dest;

assert(NULL != dest && NULL != src);

while ( '\0' != *dest)
{
dest++;
}

while (*dest++ = *src++)
{
NULL;
}

return destbak;
}

int main()
{
char array[100] = "hello world";
char *p = "abcdef";

mystrcat(array, p);

printf("array = %s\n",array);
printf("hello...\n");
system("pause");
return 0;
}




4、模拟实现strcmp函数(两种方法)

//模拟实现strcmp

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//方法一
int mystrcmp1(const char *str1, const char *str2)
{

assert(NULL != str1 && NULL != str2);

while ( '\0' != *str1 || '\0' != *str2 )
{
if (*str1 > *str2)
{
return 1;
}
if (*str1 < *str2)
{
return -1;
}
str1++;
str2++;
}
if ('\0' == *str1 && '\0' == *str2)
{
return 0;
}

}
//方法二
int mystrcmp2(const char *str1, const char *str2)
{

assert(NULL != str1 && NULL != str2);

while (*str1 == *str2)
{
if ('\0' == *str1)
{
return 0;
}
str1++;
str2++;
}
if (*str1 > *str2)
{
return 1;
}
else
return -1;

}

int main()
{
char *p = "abjdidfe";
char *p2 = "dfjie";
int ret = 0;

ret = mystrcmp1(p,p2);
if (0 == ret)
{
printf("p1 = p2\n");
}
else if(ret > 0)
printf("p1 > p2\n");
else
printf("p1 < p2\n");

ret = mystrcmp2(p,p2);
if (0 == ret)
{
printf("p1 = p2\n");
}
else if(ret > 0)
printf("p1 > p2\n");
else
printf("p1 < p2\n");
printf("hello...\n");
system("pause");
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐