[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<j;i++,j--)
{
// 交換前後兩個相應位置的字符
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<stdio.h>
#include<assert.h>
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<stdio.h>
#include<assert.h>
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;
}