#include <iostream>
void* _memcpy(void* to, void* from, size_t size){
if (to == nullptr || from == nullptr || size <= 0){
return nullptr;
}
else
{
unsigned char* c_to = (unsigned char*)to;
unsigned char* c_from = (unsigned char*)from;
while (size-- > 0){
*c_to++ = *c_from++;
}
return to;
}
}
char* _strcpy(char* strDes, char const* strSrc){
if (strDes == nullptr || strSrc == nullptr){
return nullptr;
}
else{
char* str = strDes;
while ((*str++ = *strSrc++) != '\0');
return strDes;
}
}
int strlength(const char* str)
{
if(str == nullptr)
{
return -1;
}
int max_int = ~(1 << (sizeof(int)*8 - 1));
const char* p = str;
while (*str != '\0'){
if (str - p + 1 > max_int){
return -1;
}
++str;
}
return int(str - p);
}
void* _memmove(void* to, void* from, size_t size){
if (to == nullptr || from == nullptr || size <= 0){
return nullptr;
}
else{
unsigned char* c_to = (unsigned char*)to;
unsigned char* c_from = (unsigned char*)from;
if (c_to < c_from)
{
while ((*c_to++ = *c_from++) != '\0');
}
else{
while (size > 0){
*(c_to + size - 1) = *(c_from + size - 1);
--size;
}
}
return to;
}
}
char* stringReserve(char* str)
{
if (str == nullptr){
return nullptr;
}
int strLen = strlen(str);
char* last = str + strLen - 1;
char* first = str;
while (first < last){
*first ^= *last;
*last ^= *first;
*first ^= *last;
++first;
--last;
}
return str;
}
char* stringReverse2(char* str, int len){
if (str == nullptr || len <= 1){
return str;
}
else{
*str ^= *(str + len - 1);
*(str + len - 1) ^= *str;
*str ^= *(str + len - 1);
return stringReverse2(str + 1, len - 2) - 1;
}
}
void stringTurn(char* str)
{
if (str == nullptr){
return;
}
char* pLen = str;
while (*pLen++ != '\0');
pLen -= 2;
char* fir = str;
while (fir < pLen){
*fir ^= *pLen;
*pLen ^= *fir;
*fir ^= *pLen;
++fir;
--pLen;
}
while (*str != '\0' && *str == ' ')++str;
if (*str == '\0'){
return;
}
char* start = str;
while (*str++ != '\0'){
if (*str == ' ' || *str == '\0'){
char* end = str - 1;
while (start < end){
*start ^= *end;
*end ^= *start;
*start ^= *end;
++start;
--end;
}
start = str + 1;
}
}
}
char* turnword(char* str){
if (str == nullptr){ return str; }
char* res = str;
while (*str != '\0' && *str == ' ')++str;
if (*str == '\0')return str;
char* start = str;
while (*str++ != '\0'){
if (*str == '\0' || *str == ' '){
char* end = str - 1;
while (start < end){
*start ^= *end;
*end ^= *start;
*start ^= *end;
--end;
++start;
}
start = str + 1;
}
}
return res;
}
int main()
{
char c_from[] = "ye chao";
char c_to[20];
_memcpy(c_to, c_from, sizeof(c_from) + 1);
std::cout << c_to << std::endl;
c_to[5] = '\0';
std::cout << c_to << std::endl;
std::cout << strlength("\0") << std::ends << strlength(c_from) << std::endl;
int memoryMove[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
_memmove(memoryMove+2, memoryMove , sizeof(int) * 4);
for (int i = 0; i < 10; i++)
{
std::cout << memoryMove[i] << " ";
}
char p[] = "12345";
std::cout << stringReserve(p) << std::endl;
char pp[] = "1234567890";
std::cout << stringReverse2(pp, strlen(pp)) <<std::endl;
char erre[] = " 123 45 abc lixi i";
std::cout << erre << std::endl;
stringTurn(erre);
std::cout << erre;
return 0;
}
![这里写图片描述](https://img-blog.csdn.net/20170719221223929?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2xpeGkxOTkzMTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)