实现字符串的逆序并不是将字符串逆序打印,而是将字符串"abcdef"逆序成为"fedcba"。
目录
1.非递归实现逆序字符串
int Strlen(char* str)//计算字符串长度,也可以直接调用头文件为<string.h>中strlen函数
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char* str)//逆序字符串,分别从字符串两端开始互换
{
int len = Strlen(str);
int left = 0; //为字符串的首端
int right = len-1;//为字符串的末端,-1是因为下标从0开始
while (left < right)
{
char tmp = *(str + left);
*(str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
int main()
{
char str[] = "abcdef";
reverse(str);
printf("%s", str);
return 0;
}
2.递归实现逆序字符串
int myStrlen(char* str)
{
int count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
void reverse(char* str)
{
int len = myStrlen(str);//获取字符串长度
char tmp = *str; //得到字符串的首端元素
*str = *(str + len - 1);//首端元素被替换成末端的元素
*(str + len - 1) = '\0';//末端元素被替换成‘\0’,进行字符串的缩短。
if (myStrlen(str + 1) >= 2)//str+1是进行到字符串的第二个元素
//因为末尾的f已经被替换成了'\0'
{ //所以此时字符串为bcde\0
reverse(str + 1); //下一次就是对b和e的互换
}
*(str + len -1) = tmp;再将上一次f被换成'\0'后再换成a实现最终的互换
}
int main()
{
char str[] = "abcdef";
reverse(str);
printf("%s", str);
return 0;
}