【C语言】 字符串逆序
字符串逆序有多种办法,下面我们分方法而论:
// 非递归实现字符串反转:
char *reverse(char *str)
{
if( !str )
{
return NULL;
}
int len = strlen(str);
int i,j;
char temp;
for( i = 0,j=len-1; i
{
// 交换前后两个相应位置的字符
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
return str;
}
int main()
{
char src[] = {"abcdef"};
char *pdest = reverse(src);
puts(src);
return 0;
}
//递归就是一种栈结构:
#include
#include
void reverse_string(const char * const string)
{
assert(string);
if (*string == '\0')
return;
else
reverse_string(string+1);// 先将字符压栈
putchar(*string);// 再将字符按照先进后出的顺序输出
}
int main()
{
char string[20] = {0};
scanf("%[^\n]",string);
reverse_string(string);
printf("\n");
return 0;
}
亦可:(若要求不使用其他库函数)
#include
#include
int my_strlen(const char *string)
{
assert(string);
if(*string == '\0')
{
return;
}
else
return 1+my_strlen(string+1);
}
char *reverse_string(char *string,int len)
{
assert(string);
if(!string)
{
return NULL;
}
if(len > 1)
{
char tmp = string[0];
string[0] = string[len-1];
string[len-1] = '\0'; // 最后一个字符在下次递归时不再处理
reverse_string(string + 1,len-2);//递归调用,每调用一次,要反转的字符串分别从头和末尾各减少一个
string[len-1] = tmp;
}
return string;
}
int main()
{
char string[20] = {0};
int len;
scanf("%s",string);
len = my_strlen(string);
reverse_string(string,len);
printf("%s\n",string);
return 0;
}
©著作权归作者所有:来自51CTO博客作者Vs吕小布的原创作品,谢绝转载,否则将追究法律责任