函数实现纯属复习c语言时为了加深印象的简单实现
如果有bug,可以告诉我改改
(strtok函数示例效果没有达到原函数效果,就没写了)
#include <stdio.h>
#include <string.h>
//计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
int myStrlen(char* str);
//把 str1 所指向的字符串和 str2 所指向的字符串进行比较
int myStrcmp(char *str1, char *str2);
//把 str1 和 str2 进行比较,最多比较前 n 个字节
int myStrncmp(char *str1, char *str2, int n);
//检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。
int myStrcspn(char *str1, char *str2);
//检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
int myStrspn(char *str1, char *str2);
//根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。
int myStrxfrm(char *dest, char *src, int n);
//把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
char *myStrncpy(char *dest, char *src, int n);
//在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
char *myMemchr(char *str, int c, int n);
//复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
char *myMemset(char *str, int c, int n);
//把 src 所指向的字符串复制到 dest。
char *myStrcpy(char* dest,const char* src);
//从 src 复制 n 个字符到 dest。
char *myMemcpy(char *str1, const char *str2, int n);
//把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
char *myStrcat(char *dest, char *src);
//另一个用于从 src 复制 n 个字符到 dest 的函数。
char *myMemmove(char *str1, char *str2, int n);
//把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
char *myStrncat(char *dest, char *src, int n);
//在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
char *myStrchr(char *str, int c);
//在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
char *myStrrchr(char *str, int c);
//在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
char *myStrstr(char *haystack, char *needle);
//分解字符串 str 为一组字符串,delim 为分隔符。
char *myStrtok(char *s,const char *delim);
void testMyStrlen();
void testMyMemchr();
void testMyStrcpy();
void testMyMemset();
void testMyMemcpy();
void testMyStrcat();
void testMyMemmove();
void testMyStrncat();
void testMyStrchr();
void testMyStrcmp();
void testMyStrncmp();
void testMyStrcoll();
void testMyStrncpy();
void testMyStrrchr();
void testMyStrcspn();
void testMyStrpbrk();
void testMyStrspn();
void testMyStrstr();
void testMyStrtok();
void testMyStrxfrm();
void showMenu();
int main(){
int cmd=-1;
do{
showMenu();
scanf("%d",&cmd);
switch (cmd){
case 1:testMyStrlen();break;
case 2:testMyMemchr();break;
case 3:testMyStrcpy();break;
case 4:testMyMemset();break;
case 5:testMyMemcpy();break;
case 6:testMyStrcat();break;
case 7:testMyMemmove();break;
case 8:testMyStrncat();break;
case 9:testMyStrchr();break;
case 10:testMyStrcmp();break;
case 11:testMyStrncmp();break;
case 12:testMyStrcoll();break;
case 13:testMyStrncpy();break;
case 14:testMyStrrchr();break;
case 15:testMyStrcspn();break;
case 16:testMyStrpbrk();break;
case 17:testMyStrspn();break;
case 18:testMyStrstr();break;
case 19:testMyStrtok();break;
case 20:testMyStrxfrm();break;
default:break;
}
}while(cmd!=0);
return 0;
}
char *myMemcpy(char *str1, char *str2, int n){
for(int i=