劍指offer之翻轉單詞順序
1 題目
輸入一個英文橘子,翻轉句子中的單詞順序,但是單詞內(nèi)字符串的順序不變,簡單起見,標點符號和普通字符字母一樣處理,例如輸入字符串"I am a student.",則輸出"student. a am I"
2 思路
先反轉字符串所有,然后在反轉里面的單詞,我們用兩個首尾指針操作
3 代碼實現(xiàn)
#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
作者:chen.yu
深信服三年半工作經(jīng)驗,目前就職游戲廠商,希望能和大家交流和學習,
微信公眾號:編程入門到禿頭 或掃描下面二維碼
零基礎入門進階人工智能(鏈接)