strcpy 函数的实现
#include<stdio.h>
#include <assert.h>
char* Strcpy(char* dest,const char* src) {
int i;
char* ret = dest;
assert(src!= NULL);
assert(dest!= NULL);
for(i = 0;src[i]!='\0';i++) {
dest[i] = src[i];
}
dest[i] = '\0';
return ret;
}
int main() {
char string1[1024];
char string2[1024];
gets(string1);
Strcpy (string2,string1);
puts(string2);
return 0;
}
stcat 函数的实现
#include<stdio.h>
#include <assert.h>
char* Strcat(char* dest,const char* src) {
int i;
int k;
char* ret = dest;
assert(src!= NULL);
assert(dest!= NULL);
//for(i = 0,k = 0;dest[i]!='\0';i++,k++);
//for(i = 0;src[i]!='\0';i++) {
// dest[k++] = src[i];
//}
//dest[k] = '\0';
while(*dest){
dest++;
}
while((*dest++ = *src++)){
;
}
return ret;
}
int main() {
char string1[1024];
char string2[1024];
gets(string1);
gets(string2);
Strcat (string2,string1);
puts(string2);
return 0;
}
strcmp函数
#include <string.h>
#include<stdio.h>
#include <assert.h>
int Strcmp(const char* str1,const char* str2) {
assert(str1!=NULL);
assert(str2!=NULL);
while(*str1!='\0'&&*str2!='\0') {
if(*str1==*str2){
str1++;
str2++;
continue;
}
else if(*str1>*str2){
return 1;
}
else if(*str1<*str2) {
return -1;
}
str1++;
str2++;
}
if((*str1)==(*str2)) {
return 0;
}
if(*(str1+1)=='\0'&&*(str2+1)!='\0'){
return 1;
}
else return -1;
}
int main () {
int result;
char str1[1024];
char str2[1024];
gets(str1);
gets(str2);
printf("%d\n",result = Strcmp (str1,str2));
return 0;
}
strstr函数
#include <string.h>
#include<stdio.h>
#include <assert.h>
char* Strstr(char * str1,const char * str2){
char* black_ptr;
char* red_ptr;
const char* search_ptr;
int i;
assert(str1!=NULL);
assert(str2!=NULL);
black_ptr = str1;
//遍历字符串
for(i = 0;str1[i]!='\0';i++,black_ptr++) {
//如果没有找到的话那么重置两个指针
//回到初始位置
red_ptr = black_ptr;
search_ptr = str2;
while(*red_ptr == *search_ptr
&&*red_ptr!='\0'
&&*search_ptr!='\0') {
red_ptr++;
search_ptr++;
}
if(*search_ptr == '\0') {
return black_ptr;
}
else continue;
}
return NULL;
}
int main () {
char str1[1024];
char str2[1024];
char* pch;
gets(str1);
gets(str2);
pch = Strstr(str1,str2);
puts(pch);
return 0;
}
strchr
#include <string.h>
#include<stdio.h>
#include <assert.h>
const char* Strchr(const char* str,int character) {
assert(str!=NULL);
while(*str++) {
if(character==*str) {
return str;
}
}
return NULL;
}
int main () {
const char* search_char;
char str[1024];
char character;
gets(str);
/*scanf("%d",&character);*/
character = getchar();
search_char = Strchr(str,character);
puts(search_char);
return 0;
}
memcpy
#include <string.h>
#include<stdio.h>
void* Memcpy(void* dest,const void* source,size_t count) {
char* ddst =(char*)dest;
const char* ssource = (char*)source;
if(dest == NULL||source == NULL) {
return NULL;
}
while(count--) {
*ddst++ = *ssource++;
}
return dest;
}
int main() {
const char string1[1024] = "i am a student";
char string2[1024];
Memcpy (string2,string1,strlen(string1)+1);
printf("%s\n",string2);
return 0;
}
memmove
#include <string.h>
#include<stdio.h>
#include <assert.h>
void *Mmemove(void* dest,const void* source,size_t count) {
//备份一下指针好让返回时候的指针是从头开始的
char* ddst =(char*)dest;
const char* ssource = (char*)source;
if(dest == NULL||source == NULL) {
return NULL;
}
//地址不重叠时候,从前面开始复制
if(ddst<=ssource||ddst>=ssource+count) {
while(count--) {
*ddst++ = *ssource++;
}
}
//地址重叠时候,从尾部开始复制
else {
//减1 就是获取下标,到了尾指针
ddst = ddst+count-1;
ssource = ssource+count-1;
while(count--) {
*ddst-- = *ssource--;
}
}
return dest;
}
int main() {
const char string1[1024] = "i am a student";
char string2[1024];
Mmemove (string1+3,string1,strlen(string1)+1);
printf("%s\n",string1+3);
}