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;
}
}