1 不使用C/C++库函数,编程实现函数strcmp的功能
int myStrcmp(const char* str1, const char* str2){ while(*str1 != '\0'&&*str2 != '\0'&&*str1 == *str2){ ++str1; ++str2; } if (*str1== '\0'&&*str2 != '\0'){ return -1; }else if (*str1!= '\0'&&*str2== '\0'){ return 1; }else if (*str1 > *str2){ return 1; }else if (*str1 < *str2){ return -1; } return 0;}
2 不使用C/C++库函数,编程实现函数strcpy的功能
char* myStrcpy(char* str1,const char* str2){ char* p = str1; if (p == NULL || str2 == NULL){ printf("The string is error! \n"); } while (*str2 != '\0'){ *p = *str2; p++; str2++; } *p = '\0'; //放置字符串结束标识符 return str1;}
3 不使用C/C++库函数,编程实现函数strstr的功能
const char* myStrstr(const char* str1,const char* str2){ const char* p1=nullptr,*p2=nullptr; while (*str1 != '\0') { p1 = str1; p2 = str2; while (*p1++ == *p2++) { if (*p2 =='\0') //找到子串 return str1; } ++str1; } return nullptr;}
4 实现字符串中单词的旋转(注意不要改变某个单词本身的子序,改变的是单词整体在字符串中的位置)
int reverseWords(char* str){//实现字符串中单词的旋转 if (str == nullptr || str == '\0') return 0; int wordBegin = 0, wordEnd = 0, len = 0; len = strlen(str); reverseStr(str, 0, len - 1);//先将整个字符串翻转 while (wordEnd < len) { wordBegin = wordEnd; if (str[wordEnd] != ' ') { while (str[wordEnd] != ' '&&str[wordEnd] != '\0') ++wordEnd; --wordEnd; reverseStr(str, wordBegin, wordEnd); } ++wordEnd; } return 1;}int reverseStr(char* str, int begin, int end){ if (str == nullptr) return 0; char temp; while (begin < end) { temp = str[begin]; str[begin]=str[end]; str[end] = temp; ++begin; --end; } return 1;}
运用标准库函数reverse函数来实现
void reverseWords(string& str){ if (str.empty()){ return;} //标准库翻转 reverse(str.begin(), str.end()); int n = str.size(); int wordBegin = 0, wordEnd = 0; while(wordEnd<n){ if (str[wordEnd] != ' '){ wordBegin = wordEnd; while (str[wordEnd] != ' '&&wordEnd<n) wordEnd++; reverse(str.begin()+wordBegin, str.begin() + wordEnd); } ++wordEnd; }}