《C和指針》——6.3
題目:
編寫一個函數,把參數字符串中的字符反向排列。
函數原型:
void reverse_string(char *string);
要求:
使用指針而不是數組下標
不要使用任何C函數庫中用於操縱字符串的函數
不要聲明一個局部數組來臨時存儲參數字符串
解答代碼:
#include <stdio.h>
void reverse_string(char *string)
{
int i, n=0;
while (*(string+n) != '\0') //計算字符串中字符的個數
n++;
n--; //字符個數n作為索引號時要減1,即從0到n-1
if (n > 0) //字符個數小於等於1時沒有必要反轉
{
for (i=0; i<=(n/2); i++)
{
if (i != (n-i))
{
char p; //字符內容交換
p = *(string+i);
*(string+i) = *(string+n-i);
*(string+n-i) = p;
}
}
}
}
int main()
{
char source[] = "ABCDEFGH";
printf("Before reverse:\n%s\n", source);
reverse_string(source);
printf("After reverse:\n%s\n", source);
getchar();
return 0;
}
注:
1、先計算字符串中非'\0'字符的個數
2、首位字符輪流交換