C++資料結構與演算法: 如何反轉字串

圖一.利用指標將字串反轉

字串長度文章,我簡單解釋如何移動指標得到字串長度,而這篇將利用兩個指向字元資料的指標變數sptr和eptr將字串反轉.使用指標的好處計算效率比較好,它的時間複雜度為O(n).

假設要反轉的字串為"AEIOU",sptr將指向字元陣列Vowels的起始位置,而eptr則指向Vowels的結束位置.若eptr的記憶體位址大於sptr時,eptr的字元資料將與sptr交換,而當eptr小於等於sptr將離開此迴圈.

void StringOperation::reverse(char *sptr)
{
    char *eptr=sptr+strlen(sptr)-1;
    while(eptr>sptr)
    {
        char temp=*sptr;
        *sptr=*eptr;
        *eptr=temp;
        ++sptr;
        --eptr;
    }
}

雖然字元所佔用記憶體空間為1 bytes, 然而指標(pointer)主要儲存記億體位址,例如一開始sptr指向Vowel[0],因此sptr將記錄Vowel[0]的記憶體位址.換句話說,在C++,儘管指標變數指向double,它所使用的記憶體空間仍然是4 bytes.


Reference:

  1. How does this string reverse recursion work?, stackoverflow
  2. http://stackoverflow.com/questions/12663179/how-does-this-string-reverse-recursion-work
  3. Qt教學與開發
  4. http://chenglearning.blogspot.tw/p/qt.html

留言

這個網誌中的熱門文章

VirtualBox教學:重設硬碟(.vdi)大小(上)

VirtualBox教學:重設硬碟(.vdi)大小(下)

VirtualBox教學: 新增Windows7虛擬電腦(下)