1 实现strcmp
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int my_strcmp( char* str1, char* str2)
{
assert(str1);
assert(str2);
char* p1 = str1;
char* p2 = str2;
while (*p1 == *p2) {
++p1;
++p2;
}
if (*p1<*p2) {
return -1;
}
else if (*p1 == *p2) {
return 0;
}
else {
return 1;
}
}
int main()
{
char str1[] = "qwe";
char str2[] = "gqweqe";
printf("%d", my_strcmp(str1, str2));
system("pause");
return 0;
}
2 实现strncmp
int Mystrncmp(const char *dest, const char * src, int k)
{
while (*dest != '\0'&& *src != '\0'&& k){
if (*dest - *src > 0){
return 1;
}
if (*dest - *src < 0){
return -1;
}
*dest++;
*src++;
k--;
}
if (*dest == '\0'&&*src != '\0')
{
return -1;
}
if (*dest != '\0'&&*src == '\0')
{
return 1;
}
return 0;
}
3实现strcpy
char *Mystrcpy(char *dest,const char *src)
{
/*char *p = dest;
while(*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return p;*/
//优化后
char *p = dest;
while(*dest++ = *src++){}
return p;
}
4实现strncpy
char* Mystrncpy(char *dest, const char * src, int k)
{
char *p = dest;
while (k--){
if (*src){
*dest++ = *src++;
}
}
return dest;
}
5 实现strcat
char *Mystrcat(char *dest,const char *src)
{
char *p = dest;
assert(dest!= NULL && src != NULL);
while(*dest != '\0')
{
dest++;
}
//dest指向了\0
while(*dest++ = *src++){}
return p;
}
6 实现strncat
char* Mystrncat(char *dest,const char * src, int k)
{
char *p = dest;
while (*dest){
dest++;
}
while (k--){
if (*src)
{
*dest++ = *src++;
}
}
*dest = '\0';
return dest;
}
7 实现strstr
const char *Mystrstr (const char *str1,const char *str2 )
{
while(*str1 != '\0')
{
const char *p = str1;
while(*str1!= '\0' && *str2 != '\0'&&*str1 == *str2)
{
str1++;
str2++;
}
if(*str1 == '\0')
{
return NULL;
}
if(*str2 == '\0')
{
return p;
}
str1++;
}
return NULL;
}