題目
先介紹我自己的思路:
遍歷這個字符串,然后用一個char*
類型的數(shù)組記錄下每一個空格的位置,然后打印的時候,打印兩個指針之間的字符。
for (; *c != '\0'; c++)
{
if (*c == ' ')
space[++i] = c;
}
這是遍歷句子然后記錄空格位置的程序。
只是我寫程序的時候,處理空格不夠完美,多打了空格并且代碼也不是特別好
for (; i > 1; i--) print_char(space[i-1]+1, space[i]); print_char(space[0 ] , space[1]);
這一段我們本來是合在一起打印的,結(jié)果會出現(xiàn)空格的問題,然后我就這樣拆開了。
下面是我的code:
#include <iostream>
void print_char( char*beg, char*end)
{
for (char* s = beg; s != end; s++)
std::cout << *s;
std::cout << " ";
}
void reverse_sentence(char* str)
{
char* c = str;
int i = 0;
char* space[50] = { NULL };
space[0] = c;//space[0]=beg
for (; *c != '\0'; c++)
{
if (*c == ' ')
space[++i] = c;
}
space[++i] = c;//end
for (; i > 1; i--)
print_char(space[i-1]+1, space[i]);
print_char(space[0 ] , space[1]);
}
int main()
{
char* str = "I am a student..";
reverse_sentence(str);
}
運行結(jié)果:
運行結(jié)果1
可以看出,最后一個字母的后面還是多打了一個空格,不過可以不用上面的print函數(shù),單獨給第一個單詞寫一句,不要打印空格的句子,我就不嘗試了。
思路2:
還可以先把整個字符串翻轉(zhuǎn),得到
..tneduts a ma I
然后呢,再翻轉(zhuǎn)每個單詞。
這樣的話,先遍歷一遍進(jìn)行翻轉(zhuǎn)
這里大家準(zhǔn)備怎么樣翻轉(zhuǎn)一個字符串呢?
介紹一個我覺得實現(xiàn)起來很簡單的方法:
頭尾各一個指針,然后向中間遍歷,swap!
我直接寫過這個問題:
翻轉(zhuǎn)字符串
整個句子的翻轉(zhuǎn)完成之后呢,我們再檢測空格,然后對每個單詞調(diào)用這個翻轉(zhuǎn)的程序,也是很巧妙呢
代碼我就懶得寫了,還是喜歡自己寫的哈哈。