1.实现strcpy
//复制
char* Strcpy(char* dest,const char* src) {
assert(src != NULL);
int i = 0;
for ( i = 0; src[i]!='\0' ; i++) {
dest[i] = src[i];
}
dest[i] = '\0';
return dest;
}
实现strcat
//连接
char* Strcat(char* dest, const char* src) {
assert(dest != NULL);
assert(src != NULL);
int i = 0;
for (; dest[i] != '\0'; i++);
for (int j=0; src[j] != '\0'; j++,i++) {
dest[i] = src[j];
}
dest[i] = '\0';
return dest;
}
实现strstr
//寻找相同的字符序列并返回
char* Strstr(char* dest, const char* src) {
assert(dest != NULL);
assert(src != NULL);
char* i = dest;
char* j = src;
while (*i != '\0') {
char* k = i; //用来判断相等
while (*k != '\0'&&*j != '\0'&& *k == *j) {
++j;
++k;
}
if (*j == '\0') { //找到了
return i;
}
++i;
}
return NULL;
}
实现strchr
//返回第一个与所给字符相同的字符下标
char* Strchr(const char* dest,char s) {
assert(dest != NULL);
char* p = dest;
for (; *p != '\0'; p++) {
if (*p==s) {
break;
}
}
return p;
}
实现strcmp
//比较字符串大小
int Strcmp(char* dest, const char* src) {
assert(dest != NULL);
assert(src != NULL);
int i = 0;
for (; dest[i] != '\0'&&src[i] != '\0'; i++) {
if (dest[i] < src[i]) {
return -1;
}else if (dest[i] > src[i]) {
return 1;
}else {
}
} //比较结束
if (dest[i] < src[i]) {
return -1;
}
else if (dest[i] > src[i]) {
return 1;
}
else {
return 0;
}
}
实现memcpy
//内存拷贝,num表示拷贝的字节大小
void* Memcpy(void* dest,const void* src,size_t num) {
char* pdest = (char*)dest;
const char* psrc = (const char*)src;
for (size_t i = 0; i < num; i++) {
pdest[i] = psrc[i];
}
return dest;
}
以下主函数测试未初始化字符串,函数参数未修改
void main() {
char dest[1024] = " "; //此处数组内容未给出,如需测试请自行给出
char src[1024] = " ";
Strcpy(dest, src);
printf("%s\n", dest);
Strcat(dest, src);
printf("%s\n", dest);
char* ret = strstr(dest, src);
printf("%p\n", dest);
printf("%p\n", ret);
char* ret=strchr(dest, 'a');
printf("%d\n", ret - dest + 1);
int tmp=Strcmp(dest, src);
if (tmp == 0) {
printf("dest=src\n");
}
else if (tmp >0) {
printf("dest>src\n");
}
else if (tmp <0) {
printf("dest<src\n");
}
Memcpy(dest,src,3);
printf("%s\n",dest);
system("pause");
}