字符串训练(一)模拟实现strlen,strcmp,strcpy,strcat函数
2016-08-03 18:07
369 查看
1、模拟实现strlen函数(计数器实现,两个指针相减,递归实现)
2、模拟实现strcpy函数
3、模拟实现strcat函数
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;
}
//模拟实现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;
}
相关文章推荐
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- C语言:模拟实现strlen、strcpy、strcmp、strReverse、strcat函数
- 和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 自制函数实现strlen、strcpy、strcmp、strcat函数
- 编C语言程序:用自定义函数实现字符串处理函数strcat、 strcpy、strcmp、strlen和strlwr的功能
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- strlen, strcpy, strcat, strcmp, memset... (字符串操作函数的实现)
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
- 字符串处理函数strlen、strcpy、strcat、strcmp和convert的C语言实现
- C语言字符串函数的模拟实现(strlen、strcpy、strcat、strstr 、strcmp)
- 模拟实现strlen,strcpy,strcmp,strcat,strstr库函数
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- C语言模拟实现strcpy、strlen、strcmp、strcat
- 模拟实现strlen、strcpy、strcmp、strncmp等字符串函数
- C语言字符串常见操作-strcpy、strlen、strcat和strcmp实现
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()