sách gpt4 ăn đã đi

Ngôn ngữ C để triển khai các hàm thư viện chuỗi phổ biến (được khuyến nghị)

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 29 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này thực hiện các hàm thư viện chuỗi phổ biến trong ngôn ngữ C (được khuyến nghị) được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.

1. Triển khai memcpy

Copy nội dung được trỏ tới bởi src tới vị trí được chỉ ra bởi dst, copy len bytes.

  • memcpy là chức năng sao chép bộ nhớ
  • Khi sử dụng memcpy, bạn không cần quan tâm đến loại và sao chép theo byte.
  • Nó sẽ không dừng lại khi gặp "\0", vì vậy tốt hơn nên sử dụng strcpy khi sao chép chuỗi, sẽ an toàn hơn.
void *Mymemcpy(void * dst, const void * src, int len){ void *ret = dst; assert(src); assert(dst); while (len--){ *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return ret;}int main(){ char str[100] = "ABCDE"; Mymemcpy(str, str + 2, 2); printf("%s", str); system("tạm dừng"); return 0;}

Ngôn ngữ C để triển khai các hàm thư viện chuỗi phổ biến (được khuyến nghị)

Nhưng khi chúng tôi sửa đổi trường hợp thử nghiệm, chúng tôi nhận được kết quả như sau.

Ngôn ngữ C để triển khai các hàm thư viện chuỗi phổ biến (được khuyến nghị)

Nguyên nhân của tình trạng này rất đơn giản, vì địa chỉ đầu tiên của chuỗi nguồn của chúng ta thấp hơn địa chỉ đầu tiên của chuỗi đích. Theo mặc định, khi chúng ta sao chép từ trái sang phải thì chuỗi đầu tiên sẽ ghi đè lên chuỗi thứ hai nên có. một tình huống toàn A. Đây là một bản sao chồng chéo bộ nhớ. Rất đơn giản để giải quyết vấn đề này. Bạn chỉ cần thêm phán đoán trước khi sao chép. , chúng ta sẽ sao chép từ phải sang trái. Điều này sẽ giải quyết được vấn đề này một cách hoàn hảo.

  。

2. Triển khai mô phỏng Memmove

Ở đây chúng tôi lặp lại trường hợp thử nghiệm vừa rồi và thấy rằng sau khi thêm phán đoán và sao chép từ phải sang trái, không có tình huống toàn A.

void * Mymemmove(void * dst, const void *src, int len){ char *_src = (char*)src; char *_dst = (char*)dst; if (_dst > _src&&_dst < _src + len){ _dst = _dst + len - 1; _src = _src + len - 1; while (len--){ *_dst = *_src; _dst--; _src--; } } else { while (len--){ *_dst = *_src; _dst++; _src++; } } return dst;}int main(){ char str[100] = "ABCDE"; int len ​​= strlen(str); memcpy(str+1, str, len); printf("%s", str); system("tạm dừng"); return 0;}

Ngôn ngữ C để triển khai các hàm thư viện chuỗi phổ biến (được khuyến nghị)

  。

3. Thực hiện mô phỏng strlen

1. Phương pháp truy cập:

int Mystrlen(char * str){ int count = 0; while (*str != 0){ str++; count++; } trả về count;}int main(){ char a[] = "dadai"; int aa=Mystrlen(a); printf("%d", aa); system("tạm dừng"); trả về 0;}

2. Phương pháp đệ quy:

int Mystrlen(char * str){ if (*str == '\0'){ return 0; } else return (1 + Mystrlen(str + 1));}//1+1+1+1+1+0int main(){ char a[] = "dadai"; int aa=Mystrlen(a); printf("%d", aa); system("tạm dừng"); return 0;}

3. Thực hiện sử dụng con trỏ:

int Mystrlen(char * str){ char *p = str; while (*p){ p++; } return (p - str);}int main(){ char a[] = "dadai"; int aa=Mystrlen(a); printf("%d", aa); system("tạm dừng"); return 0;}

  。

4. Triển khai mô phỏng strcpy

Sao chép nội dung được trỏ bởi src vào đơn vị lưu trữ được trỏ bởi dst.

char * Mycpy(char *dst, const char * src){assert(dst != NULL && src !=NULL);char *Mycpy = dst;while((*dst++ = *src++) != '\0');return Mycpy;}int main(){ char src []= "daadok"; char dst[10] ; Mycpy(dst, src); printf("%s", dst); system("tạm dừng"); return 0;}

  。

5. Triển khai mô phỏng strcmp

strcmp được sử dụng để so sánh xem hai chuỗi có bằng nhau hay không. Nếu chúng bằng nhau, nó trả về 0. Nếu dst>src, nó trả về 1. Ngược lại, nó trả về -1.

int Mystrcmp(const char* dst,const char * src){ while (*dst&&*src&&(*dst == *src)){ dst++; src++; } if (*dst > *src){ return 1; } else if (*dst < *src){ return -1; } else if (*dst == *src){ return 0; }}int main(){ char str1[] = "abcdefg"; char str2[] ​​= "dfd"; int a=Mystrcmp(str1, str2);; printf("%d", a); system("tạm dừng"); return 0;}

  。

6. thực hiện mô phỏng strstr

Tìm vị trí đầu tiên trong dst bằng src và xuất ra nội dung được trỏ tới bởi dst sau vị trí này.

char *mystrstr(const char *dst,const char *src){ assert(dst); assert(src); const char *p = dst; while (*p){ const char *movep = p; const char *sp = src; while(*movep && *sp&& *sp== *movep){ sp++; movep++; } if (*sp == '\0'){ return (char *)p; } p++; } return NULL;}int main(){ const char* dst = "abcd123456"; const char*src = "cd"; char *ret= mystrstr(dst, src); printf("%s", ret); system("tạm dừng"); return 0;}

Ngôn ngữ C để triển khai các hàm thư viện chuỗi phổ biến (được khuyến nghị)

  。

7. Mô phỏng và triển khai strcat

Ghép nội dung được trỏ bởi src vào cuối nội dung được trỏ bởi dst.

char * mystrcat(char*dst, const char*src){ assert(src); assert(dst); char*ret = dst; while (*dst){ dst++; } while (*src){ *dst = *src; dst++; src++; } return ret;}int main(){ char dst[64] = "abcd"; char *src = "efg"; mystrcat(dst, src); printf("%s", dst); system("tạm dừng"); return 0;}

Ngôn ngữ C để triển khai các hàm thư viện chuỗi phổ biến (được khuyến nghị)

Đến đây là kết thúc bài viết về cách triển khai các hàm thư viện chuỗi phổ biến trong ngôn ngữ C. Để biết thêm thông tin về các hàm thư viện chuỗi trong ngôn ngữ C, vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt qua các bài viết liên quan bên dưới. .

Liên kết gốc: https://blog.csdn.net/weixin_50302770/article/details/121083775?

Cuối cùng, bài viết này về cách triển khai các hàm thư viện chuỗi phổ biến trong ngôn ngữ C (được khuyến nghị) kết thúc tại đây. Nếu bạn muốn biết thêm về cách triển khai các hàm thư viện chuỗi phổ biến trong ngôn ngữ C (được khuyến nghị), vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục Duyệt qua các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

29 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress