問題描述:
則輸出:
i ma yppah。
2、反轉句子。任意輸入一串單詞,要求把每個單詞的位置翻轉過來,但每個單詞的字母順序不要改變。如輸入:
則輸出:。
完整**:
#include
#include
void reverse(char *b)
std::cout << " ";
j = i;
}}
//問題一:
int main()
//問題二:
int main()
問題分析:
1、題目要求反轉單詞,只反轉句子中的每個單詞,單詞的順序並不改變;
2、首先需要把單詞分離出來;
3、怎樣算乙個單詞?第乙個與第乙個空格之間或者空格與下乙個空格之間的x個字母可看為乙個單詞;
這部分可以這樣計數:當當前的陣列元素不為空,而且不是空格,就給x加1然後去判斷下乙個;
if(b[i] && b[i] != ' ') ++code;
4、將其中的這些字母(乙個單詞)反向輸出;
for (int k(code-1); k != 單詞開始的標記; - -k)
printf ( "%c", b[k]);
這樣算乙個單詞反轉完畢,需要加上空格在之後:
printf (" ");
5、單詞開始的標記我們可以int j給它初始化為-1,因為如果當我們第乙個單詞只有乙個字母時k = code-1 = 0,需要和b[j]進行比較,確保輸出整個單詞;這裡code-1的原因是我們在技術時使用的++code,而陣列的下標從零開始,所以此時的code表示的是最後乙個字母之後的空格元素的下標;
6、每一次反轉完成之後都需要移動單詞開始的標記,讓 其向後移動到目前單詞結束的空格處,以便下一次控制長度;
所以需要在函式迴圈底部加上j = code;
所以我們的函式就可以寫成:
void reverse(char *s)
}
7、至於問題二:
備註:完整**裡面i,k之所以定義成unsigned是因為strlen(char *s)返回的是無符號整型,當我們把乙個無符號整型的數字和整型數字進行比較賦值的時候系統會警告,為了讓其不出現警告,所以我們將控制下標的變數也定義成無符號整型;
字串反轉
據說一道微軟的面試題,要求考慮時間和空間的優化,下面給出幾種通常字串反轉的方法 1 直接陣列操作 char strreverse char str return str 這種做法原來的str沒有儲存,原來的str也改變了 2 指標操作 char strreverse char str return ...
字串反轉
include include include 方法一 將第乙個字元和最後乙個互換,第二個和倒數第二個互換,如此依次迴圈下去 char strrev1 const char str return tmp free tmp 方法二 不額外申請一片儲存字串的記憶體空間,通過中間變數來改變傳遞進來的字串裡...
字串反轉
解法一 第一次看到這題目,想到最簡單 最直覺的解法就是 遍歷字串,將第乙個字元和最後乙個交換,第二個和倒數第二個交換,依次迴圈,即可,於是有了第乙個解法 const char str return tmp 這裡是通過陣列的下標方式訪問字串的字元,實際上用指標直接操作即可。解法二正是基於此,實現 為 ...