1 題目
輸入一個英文橘子,翻轉句子中的單詞順序,但是單詞内字元串的順序不變,簡單起見,标點符号和普通字元字母一樣處理,例如輸入字元串"I am a student.",則輸出"student. a am I"
2 思路
先反轉字元串所有,然後在反轉裡面的單詞,我們用兩個首尾指針操作
3 代碼實作
#include <stdio.h>
/*
* 反轉整個字元串
*/
void reverse(char *begin, char *end)
{
if (NULL == begin || NULL == end)
return;
while (begin < end)
{
char temp = *end;
*end = *begin;
*begin = temp;
++begin;
--end;
}
}
/*
* 反轉字元串裡面的單詞
*/
char* reverseNumeber(char *str)
{
if (NULL == str)
{
return NULL;
}
char *begin = str;
char *end = str;
while (*end != '\0')
{
end++;
}
--end;
//反轉整個字元串
reverse(begin, end);
//再反轉裡面的單詞
begin = end = str;
while (*begin != '\0')
{
if (*begin == ' ')
{
begin++;
end++;
}
else if (*end == ' ' || *end == '\0')
{
//如果這裡是用reverse(begin, end--)
//那麼我們用' '和前面的指針替換,有問題。
reverse(begin, --end);
begin = ++end;
}
else
{
++end;
}
}
return str;
}
int main()
{
char a[] = "chenyu word hello";
char *result = NULL;
result = reverseNumeber(a);
if (NULL == result)
{
printf("result is NULL\n");
}
else
{
printf("%s\n", result);
}
return 0;
}
4 運作結果
hello word chenyu