題目:編寫乙個單詞逆序輸出的演算法,例如輸入「see you in another life」,要求輸出「life another
in you see」。
解答:解法一:只需掃瞄一遍:
#include
void
reverseword(
const
char
* src,
char
* dest)
while
(count--);
break;
} if(*src ==
' ')
//遇到空格
*dest++ =
' ';
count = 0; }
else
} *dest =
'/0';
} intmain()
解法二:掃瞄兩遍。即簡單地將所有字元反轉,遍歷字串,將第乙個字元和最後乙個字元交換,第二個和倒數第二個交換,依次迴圈。接著進行第二次遍歷,對每個單詞反轉一次,這樣每個單詞就恢復成原有順序,得到題目要求的功能了:
#include
char
* reverseword(
const
char
* str)
intk = 0;
while
(k < len)
//第二次掃瞄,將每個單詞反轉
k = j+1;
//為跳過空格,為下一輪迴圈做準備
j--;
//回退一步,去掉空格
for(;i
} return
restr; }
intmain()
題目:給定乙個字串,乙個這個字串的子串,將第乙個字串反轉,但保留子串的順序不變。例如:
輸入:第乙個字串:「see you in another life」
子串:「in」
輸出:「efil rehtona in uoy ees」
解答:一般的方法是先掃瞄一遍第乙個字串,用stack把它反轉,同時記錄下子串出現的位置;然後再掃瞄一遍反轉後的字串,掃瞄過程中將原來子串再反轉,其他的不變,這樣就得到答案了。
那麼只掃瞄一遍怎麼辦呢?只需在掃瞄的過程中將子串反序壓入堆疊;掃瞄完之後,將堆疊中字元彈出,這樣子串就還是原來的順序了。實現**如下:
#include
#include
#include
const
char
* reverse(
const
char
* s1,
const
char
* token)
if(*ptoken ==
'/0'
) //包含字串token
ptoken = token;
rear = head; }
else
//不是分割的字串
} char
* ret =
newchar
[strlen(s1)+1];
inti = 0;
while
(!stackone.empty())
//非空
ret[i] =
'/0';
return
ret; }
intmain()
完美字串
約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫。也就是說字母f和f 的完美度相同。給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個字串完美...
完美字串
約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫 也就是說字母a和a的完美度相同 給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個字串完美度...
完美字串
完美字串 約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫 也就是說字母a和a的完美度相同 給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個...