翻轉單詞
翻轉單詞有兩種常見的方式:
1、藉助一個臨時字符數組;
思路:(1)、藉助一個臨時字符數組將元字符數組的內容按相反的順序存儲在臨時字符中;
(2)、將臨時數組的內容順序複製回原數組中。
代碼:
#include<stdio.h>
#include<stdlib.h>
#define MAX_STRING 7 //數組容量,宏定義
int main()
{
char str[MAX_STRING] = { 'G','o','o','d','B','y','e' };
char str_tmp[MAX_STRING] = { 0 }; //定義臨時數組str_tmp,並將其初始化爲0
int i = 0;
int j = 0;
printf("原單詞爲:\n");
for (i = 0; i < MAX_STRING; ++i)
printf("%c", str[i]); //輸出原數組
printf("\n");
//將逆序的字符存儲到臨時字符數組
i = 0; //設置循環初始條件
j = MAX_STRING - 1; //設置循環初始條件
while (i < MAX_STRING)
{
str_tmp[j] = str[i];
++i; //後移i
--j; //前移j
}
printf("翻轉後的單詞爲:\n");
for(i=0;i<MAX_STRING;++i)
{
str[i] = str_tmp[i]; //將臨時數組複製到原數組
printf("%c", str[i]); //打印翻轉後的數組
}
printf("\n");
system("pause");
return 0;
}
輸出結果爲:
2、在原數組上直接操作
思路:由於上一方法中引入了一個臨時數組,會佔用額外的內存空間,
所以考慮不借助其他數組,只在原數組上進行操作實現翻轉單詞的功能;
代碼:
#include<stdio.h>
#include<stdlib.h>
#define MAX_STRING 7 //數組容量,宏定義
int main()
{
char str[MAX_STRING] = { 'G','o','o','d','B','y','e' };
int i = 0;
int start = 0;
int tmp = 0;
int end = MAX_STRING - 1;
printf("原單詞爲:\n");
for (i = 0; i < MAX_STRING; ++i)
printf("%c", str[i]); //輸出原數組
printf("\n");
//將整個字符串翻轉
while (start < end) //當start的位置在end後面時,結束循環
{
tmp = str[end];
str[end] = str[start];
str[start] = tmp;
++start;
--end;
}
printf("翻轉後的單詞:\n");
for (i = 0; i < MAX_STRING; ++i)
{
printf("%c", str[i]); //打印翻轉後的數組
}
printf("\n");
system("pause");
return 0;
}
結果: