size_t Strlen(const char* str) {
//检验合法性
assert(str != NULL);
size_t count = 0;
while (str[count] != '\0') {
count++;
}
return count;
}
char* str(char* dest, const* src) {
assert(dest != NULL);
assert(src != NULL);
int64_t i = 0;
for (; src[i] != '\0'; ++i) {
dest[i] = src[i];
}
dest[i] = '/0';
return dest;
}
char* Strcat(char* dest, char* src) {
assert(dest != NULL);
assert(src != NULL);
//找到dest的末尾
int64_t end = 0;
/*while (dest[end] != '\0') {
end++;
}*/
for (; dest[end] != '\0'; ++end);
//拼接
int64_t cur = 0;
for (; cur != '\0'; ++cur,++end) {
dest[end] = src[cur];
}
dest[end] = '\0';
//Strcpy(&dest[end], src);
return dest;
}
int Strcmp(const char* str1, const char* str2) {
assert(str1 != '\0');
assert(str2 != '\0');
while (*str1!='\0'&&*str2!='\0')
{
if (*str1 < *str2) {
return -1;
}
else if (*str1 > *str2) {
return 1;
}
else
{
str1++;
str2++;
}
}
if (*str1 < *str2) {
return -1;
}
else if (*str1 > *str2) {
return 1;
}
else
{
return 0;
}
}
char* Strncpy(char* dest, char* src ,size_t num) {
assert(dest != NULL);
assert(src != NULL);
for (int i = 0; i < num; ++i) {
if (src[i] != '\0') {
dest[i] = src[i];
}
}
return dest;
}
const char* Strstr(const char* str1, const char* str2) {
const char* p1 = str1;
const char* p2 = str2;
const char* pos;
//判断是不是空字符串
if (*str2 == '\0') {
return NULL;
}
while (*p1!='/0')
{
pos = p1;
p2 = str2;
//当前字符相等那么
while (*p2 != '\0'&& *pos!='\0'
&&(*pos == *p2)) {
pos++;
p2++;
}
if (*p2 == '/0') {
return p1;
}
//不相等的时候指针p1向后移动一位
//p2返回原点
p1++;
}
return NULL;
}
int Strtok(char* input, const char* split_char, char* output[]) {
int output_index = 0;
char* p = strtok(NULL, split_char);
while (p != NULL) {
output[output_index] = p;
++output_index;
p = strtok(NULL, split_char);
}
return output_index;
}
int Tolower(int c) {
if (c >= 'A'&&c <= 'Z') {
c += 'a' - 'A';
return c;
}
return c;
}
void Memcpy(void* dest[], void* src[],size_t num) {
char* p_dest = (char*)dest;
char* p_src = (char*)src;
for (int i = 0; i < num; ++i) {
p_dest[i] = p_src[i];
}
//考虑内存覆盖缓冲区重合
}
void Memcpy(void* dest[], void* src[], size_t num) {
assert(dest != NULL);
assert(src != NULL);
char* p_dest = (char*)dest;
char* p_src = (char*)src;
if ((p_dest>p_src && p_dest<num+p_src) {
for (int i = num-1; i >= 0; --i) {
p_dest[i] = p_src[i];
}
}
else {
Memcpy(dest, src, num);
}
return dest;
}