字符函数和内存函数模拟实现
生活随笔
收集整理的這篇文章主要介紹了
字符函数和内存函数模拟实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
字符函數(shù)和內(nèi)存函數(shù)模擬實現(xiàn)
字符函數(shù)和內(nèi)存函數(shù)模擬實現(xiàn)
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string.h> #include<assert.h> using namespace std;int my_strlen1(const char* str)//模擬實現(xiàn)strken():計數(shù) {assert(str);int count = 0;while (*str){count++;str++;}return count; }int my_strlen2(const char*str)//遞歸 {assert(str);if (*str == '\0'){return 0;}return 1 + my_strlen2(str + 1); }int my_strlen3(const char* str)//連續(xù)的內(nèi)存上兩指針相減,返回之間元素個數(shù) {assert(str);const char*str1 = str;while (*str){str++;}return str - str1; }char* my_strcpy(char* dest, const char* str)//模擬strcpy() {assert(dest&&str);char* dest1 = dest;while (*str){*dest = *str;dest++;str++;}*dest = '\0';//注意結(jié)尾;'\0'return dest1; }char* my_strcat(char* dest, const char* str)//模擬strcat() {assert(dest&&str);char* dest1 = dest;while (*dest){dest++;}do{*dest = *str;dest++;str++;} while (*str);*dest = '\0';return dest1; }int my_strcmp(const char* dest, const char* str)//模擬strcmp() {assert(dest&&str);while (*dest != '\0'&&*str != '\0'){if (*dest == *str){str++;dest++;}}if (*str == *dest&&*str == '\0'){return 0;}else if (*dest > *str){return 1;}else{return -1;} }char* my_strstr(const char*dest, const char* str)// {assert(dest&&str);char* start;const char* str1 = str;//保存待匹配串首地址while (*dest){start = (char*)dest;//記錄每次匹配位置while (*dest == *str&&*str != '\0'){dest++;str++;}if (*str == '\0')//如果str=='\0'說明已完成匹配{return start;}//這里不能直接break;因為后面可能會出現(xiàn)else//如果完成匹配,記錄并返回第一個字符的位置;該次沒有完成匹配,記錄該位置,下一次重該位置后一個進(jìn)行比較{dest = start + 1;str = str1;}}return NULL; }void* my_memmove(void* dest, const void* str, size_t count)//注意參數(shù)和返回值的類型 {assert(dest&&str);char* dest1 = (char*)dest;char* str1 = (char*)str;if (str1 < dest1 || dest1 < str1 + count)//內(nèi)存覆蓋在后面;從后往前賦值{dest1 += (count - 1);str1 += (count - 1);while (count--){*dest1 = *str1;dest1 = dest1 - 1;str1 = str1 - 1;}}else//沒有內(nèi)存或內(nèi)存覆蓋在前面;從前往后賦值{while (count--){*dest1 = *str1;dest1 = dest1 - 1;str1 = str1 - 1;}}return dest1; }char* my_strchr(const char *str, char c) {assert(str);char* str1 = (char*)str;while (*str1++){if (*str1 == c){return str1;}}return NULL; }int main() {//測試用例中不要全部放開,可能會發(fā)生沖突char str[] = "wolf guidao";/*cout << strlen(str) << endl;cout << my_strlen1(str) << endl;cout << my_strlen2(str) << endl;cout << my_strlen3(str) << endl;*/char str1[40];//cout << strcpy(str1, str) << endl;//cout << my_strcpy(str1, str) << endl;//cout << my_strcat(my_strcpy(str1, str), str) << endl;//cout << strcmp(str, my_strcpy(str1, str)) << endl;//cout << my_strcmp(str, my_strcpy(str1, str)) << endl;//cout << my_strcmp(str, strcpy(str1, "wolf guidaoo")) << endl;//cout << my_strcmp(str, my_strcpy(str1, "wolf guidaoo")) << endl;//cout << my_strstr(str, my_strcpy(str1, str)) << endl;//cout << strstr(str, my_strcpy(str1, str)) << endl;//cout << my_strstr(str, my_strcpy(str1, "guidao")) << endl;//cout << strstr(str, my_strcpy(str1, "guidao")) << endl;//my_memmove(str1, str, 12);//memmove(str1, str, 12);//cout << str1 << endl;//my_memmove(str+11, " aini", 6);//memmove(str + 11, " aini", 6);//cout << str << endl;//memmove(str + 10, str, 12);//my_memmove(str + 10, str, 12);//cout << str << endl;//cout << my_strchr(str, 'o') << endl;//cout << strchr(str, 's') << endl;system("pause");return 0; }總結(jié)
以上是生活随笔為你收集整理的字符函数和内存函数模拟实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中类的6个默认成员函数
- 下一篇: C和C++中static的用法及友元