天天看點

5、字元串操作中相對複雜的幾個程式

1、編寫函數,實作把一個char組成的字元串循環右移n位。如abcdehi,n=2,則hiabcde。

示例代碼

2、輸入一行字元串,找出其中出現的相同且長度最長的字元串,輸出它及其首字元的位置。如yyabcdabjcabceg,則輸出為abc,3。

大體思路:把字元串yyabcdabjcabceg拆解:

yyabcdabjcabceg

yabcdabjcabceg

abcdabjcabceg

...

ceg

eg

g

然後對字元串進行排序,比較相鄰字元串的前驅,求最長的共公前驅。

在我們的程式中的展現,我們沒有用這種方法,因為這種方法在排序中會用很多時間。我們借用了C++的實作函數find來巧妙的實作。

注:basic_string::substr

basic_string substr(size_type pos = 0, size_type n = npos) const;

    The member function returns an object whose controlled sequence is a copy of up to n elements of the controlled sequence beginning at position pos.

傳回一個從指定位置開始,并具有指定長度的子字元串。

參數

pos 必選。所需的子字元串的起始位置。字元串中第一個字元的索引為 0。

n 可選項。傳回的子字元串中包含的字元數。

備注 如果 n 為 0 或負數,将傳回一個空字元串。如果沒有指定該參數,則子字元串将延續到字元串的結尾。

    在VS中測試,如是n是負數或大于主串的總長度,則輸出是pos開始到主串末尾的字元。

3、實作strstr()功能。如主串是12345678,子串是234,則傳回2345678。

4、将一句話中的單詞倒置,标點符号不倒換。如“i come from tianjin.”,倒換後變成“tianjin. from come i”。

大體思路:先把整個字元串調整,再針對每個單詞進行調整。

5、求一個字元串中連續出現次數最多的子串。

大體思路:如abcbcbcabc,則把字元串切割成:

abcbcbcabc

bcbcbcabc

  cbcbcabc

   bcbcabc

    cbcabc

     bcabc

        bc

         c

    然後,從第一個子串開始到最後一個子串,将目前串與後面的每個子串進行字元比對,并統計。

繼續閱讀