字符串倒序输出,我们第一个想到的就是位置互换,将字符串的第一个位置,与字符串的最后一个位置互换,然后字符串的第二个位置,与倒数第二个位置互换,以此类推,到了中间,左边的位置大于右边的时候,那么这个循环就终止了
循环条件(left < right);
循环语句(在这里也用到了swap)
tmp = string[left];
string[left] = string[right];
string[right] = tmp;
left++;
right++;
不用strlen这个库函数的时候,需要用到自己创建的函数,可以用上字符串的判断条件,末尾是'\0'
用上while循环,*string != '\0' string是一个指针,*string就是第一个数
在while循环里面,string++,随着地址一步一步的慢慢增多,这个字符串上面的所有字符也一个一个的被略过,用count这个变量来输出这个过程。
代码
#include <stdio.h>
int my_strlen(char* string)
{
int count = 0;
while (*string != '\0')
{
count++;
string++;
}
return count;
}
void reverse_string(char *string)
{
int left = 0;
int right = my_stlen(string) - 1;//字符串下标从0开始
while(left < right)//这个表达式对了,才能进入循环
{
char tmp = string[left];
string[left] = string[right];
string[right] = string[left];
left++;
right--;
}
}
int main()
{
char arr1[] = "abcdef";
printf("%s", arr1);
reverse_string(arr1);//arr1是一个地址,所以在reverse_string这个函数形参要用到char * 类型的形参
printf("%s", arr1);
return 0;
}
下面我们使用递归方法
因为交换每次只能最前面一个和最后面一个交换,也只有这两个可以通过0和strlen()- 1轻松获取,中间的这一大坨东西是一直留在那个里面的。
那么我们也可以写出这个迭代函数,就是把第一个和最后一个交换了,用迭代函数处理中间那一串字符串,每次迭代函数都是对那一串字符串进行取值
第一步:先把第一个位置上面的值给取下来,放到临时变量里面,tmp = string[0]
第二部:把最后一个数放在第一个的位置上,string[my_strlen - 1] = string[0]
第三步:(关键的一步),不是把临时变量放到最后一个的空位里面,而是为那中间的那一串字符串设立一个'\0' 字符串的结束标志
最后我们再把 那个临时变量放到那个地方上去
迭代还需要一个判断条件,就是中间的那一串东西没有字符了然后就输出
void reverse_string(char * str)
{
char tmp = str[0];
str[0] = str[strlen(str) - 1);//
str[strlen(str) - 1] = '\0';
if (strlen(str + 1) >= 2)
{
reverse_string(str + 1);
}
str[strlen(str) - 1 = tmp;
}
//也可以这样写
void reverse_string(char* str)
{
char tmp = *str;
int len = my_strlen(str);
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (my_strlen(str + 1) >= 2)
{
reverse_string(str + 1);
}
*(str + len - 1) = tmp;
}//就是用上了*这个符号