练习题及答案
【4月29号更新】(备忘)
// day_19
//*****************
//模拟实现strcpy
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dest, const char*src)
{
assert(dest && src);
char* p = dest;
while(*p++ = *src++) ;
return dest;
}
int main()
{
char str[10];
my_strcpy(str, "abcdef");
printf("%s\n", str);
return 0;
}
//4.模拟实现strcat
#include <stdio.h>
#include <assert.h>
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
char* str = dest;
while(*str)
str++;
while(*str++ = *src++);
return dest;
}
int main()
{
char str[8] = "hello ";
my_strcat(str, "bit");
printf("%s\n", str);
return 0;
}
//模拟实现strchr
#include <stdio.h>
#include <assert.h>
char* my_strchr(const char* str, char ch)
{
assert(str);
while(*str != ch && *str)
str++;
if(*str == ch)
return (char*)str;
else
return NULL;
}
int main()
{
char str[] = "my name is LaoLi";
printf("%s\n", my_strchr(str, 'L'));
return 0;
}
//模拟实现strstr
include <stdio.h>
#include <assert.h>
char* my_strstr(const char* dest, const char* src)
{
assert(dest && src);
char* str = (char *)dest;
char *s1, *s2;
if(!*src)
return (char *)dest;
while(*str)
{
s1 = str;
s2 = (char *)src;
while(*s1 && *s2 && (*s1 == *s2))
s1++,s2++;
if(!*s2)
return str;
str++;
}
}
//模拟实现strcmp
#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while(*str1 && *str2 && !(*str1 - *str2))
str1++,str2++;
return *str1 - *str2;
}
//模拟实现memcpy
#include <stdio.h>
#include <assert.h>
void* my_memcpy(void* dest, const void* src, size_t n)
{
assert(dest && src);
char* str1 = (char *)dest;
while(n--)
*str1++ = *(char *)src,++(char *)src;
return dest;
}
//模拟实现memmove
#include <stdio.h>
#include <assert.h>
void* my_memmove(void *dest, const void* src, size_t n)
{
assert(dest && src);
char *pdest = (char *)dest;
if (pdest < src)
{
//dest<src 左->右
while (n--)
{
*pdest = *(char *)src;
++pdest;
++(char *)src;
}
}
else
//dest>=src 右->左
while (n--)
*(pdest + n) = *((char *)src + n);
return dest;
}
int main()
{
char str[] = "memmove can be very useful......";
my_memmove(str+20, str+15, 11);
puts (str);
return 0;
}
【4月27号更新】(备忘)
// day_17
//*****************
//1.一个数组只有两个数字出现一次,其他所有数字都出现了两次,找出这两个数字,编程实现。
#include <stdio.h>
#include <assert.h>
void find_double(int *arr, int sz)
{
assert(arr);
int *p1 = arr;
int i = 0;
int n = 0;
for(i = 0; i < sz; i++)
{
int j = 0;
for(j = 0; j < sz; j++)
{
if((i != j) && (arr[i] == p1[j]))
break;
}
if(j == sz)
{
int tmp = arr[n];
arr[n] = arr[i];
arr[i] = tmp;
n++;
}
}
}
int main()
{
int arr[10] = {1,15,26,35,15,48,26,48,26,26};
int sz = sizeof(arr) / sizeof(arr[0]);
find_double(arr, sz);
printf("%d,%d\n", arr[0], arr[1]);
return 0;
}
//2.喝汽水,1瓶汽水1元,两个空瓶可以换一瓶汽水,给20元,可以喝多少瓶汽水。编程实现。
#include <stdio.h>
#define MONEY 20
int main()
{
int bottle = MOENY;
int count = MONEY;
int empty = 0;
while(bottle / 2)
{
empty = bottle % 2;
bottle /= 2;
count += bottle;
bottle += empty;
}
printf("%d\n", count);
return 0;
}
//3.模拟实现strlen
//非递归
#include <stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{
int count = 0;
assert(str);
while(*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
int ret = my_strlen("hello bit");
printf("%d\n", ret);
return 0;
}
//递归
#include <stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{
assert(str);
if(*str)
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
int ret = my_strlen("hello");
printf("%d\n", ret);
return 0;
}
//指针相减
#include <stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{
assert(str);
const char* p = str;
while(*p)
p++;
return p - str;
}
int main()
{
int ret = my_strlen("hello ");
printf("%d\n", ret);
return 0;
}
//模拟实现strcpy
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dest, const char*src)
{
assert(dest && src);
char* p = dest;
while(*p++ = *src++) ;
return dest;
}
int main()
{
char str[10];
my_strcpy(str, "abcdef");
printf("%s\n", str);
return 0;
}
//4.模拟实现strcat
#include <stdio.h>
#include <assert.h>
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
char* str = dest;
while(*str)
str++;
while(*str++ = *src++);
return dest;
}
int main()
{
char str[8] = "hello ";
my_strcat(str, "bit");
printf("%s\n", str);
return 0;
}