
- 字符串逆序🌑
- 迭代方法🌘
- 递归方法(少参数 )🌗
- (有strlen)🍊
- (无strlen)🍎
- 递归方法二(多参数)🌕
迭代方法🌘题目💦:字符串逆序
编写一个函数reverse(char *string)
实现:将参数字符串中的字符反向排列,不是逆序打印
要实现一个字符串逆序,如下图所示,令这个字符串为abcdefg,它逆序就是把它实现为gfedcba。所以就是a和g交换位置,b和f交换位置,c和e交换位置。可以理解为左边和右边的元素一个一个交换位置。写一个交换函数reverse,交换字符是一个循环的过程,写一个while循环实现。这里要注意,如果是用sizeof求字符个数的话,字符串的结束标志是\0,所以right应等于sz-2,还要注意如果要用sizeof的话这里的sizeof(arr)/sizeof(arr[0])大小不能在函数内部求。
代码如下🌟:
#include
void reverse(char* str)
{
int left = 0;
int sz = strlen(str);
int right = sz - 1;
while (left < right)
{
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
right--;
left++;
}
}
int main()
{
char ch[] = "abcdefg";
reverse(ch);
printf("%s\n", ch);
return 0;
}
递归方法(少参数 )🌗 (有strlen)🍊实现效果:
我们用递归的方法怎么实现字符串逆序?还是实现abcdefg逆序为gfedcba的过程,字符串的结束标志是\0,要想逆序整个字符串,可以理解为交换a和g加上逆序字符串bcdef,然后交换b和f加上逆序字符串cde。可以先将\0放在原先g的位置,这样可以实现字符串bcdef逆序,那b和f交换先把b放在tmp中,再把原来f的位置换成\0,可以实现字符串cde的逆序。如下图所示:总共把整个过程分成五步。第一步把a放在tmp中,第二步把g放在a原来的位置,第三步把\0放到g的位置,第四步实现字符串bcdef的逆序,第五步把tmp的元素放到原来g的位置。
代码如下🌟:
#include
void reverse(char* str)
{
char tmp = *str;//1
int len = strlen(str);
*str = *(str + len - 1);//2
*(str + len - 1) = ';'//3if
( strlen(+str1)2>=)reverse
(+str 1 );//4*
(+str - len 1 )= ; tmp//5}
int
main ()char
{
[ ch]= "abcdefg" ;reverse
()ch;printf
("%s\n",) ch;return
0 ;}
int
代码实现效果:
(无strlen)🍎那要求我们不能使用C函数库中的字符串 *** 作函数的话,那strlen就不能使用了,那我们可以自己写一个实现求字符串长度的函数。
代码如下:
my_strlen (char*) strint
{
= count 0 ;while
( *!=str ')' ++;
{
count++;
str}return
;
} countinclude
int
递归方法二(多参数)🌕
多参数的实现方法和迭代的方法相似,a和g交换后,再让字符串bcdef逆序,b和f交换后,再让字符串cde逆序。
代码如下🌟:
#my_strlen
( char*)int str=
{
0 count ; while(
* !=')'str ++ ;++
{
count;}
strreturn;
}
void countreverse
(
char [], chint,int) leftchar= right[
{
] tmp ; ch[left]=
ch[left] ; ch[right]=
ch;rightif ( tmp<
) reverseleft ( right,
+1ch, left - 1) right ; }intmain
(
) char[]
{
= ch"abcdefg"; int =0
; left int =strlen
( right ) -1ch; reverse (,
,)ch;leftmy_strlenright()
;printfch("%s\n"
,);return ch0;
}
代码实现效果:
写在最后✨:码字不易💦,对你有帮助的话,给个三连支持一下叭🍎,或者也可以关注一下🍓,每周更一篇🉑,感谢支持!📣
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)