2017-04-16 61 views
0

輸入是一個字符串:HeLloWorlD爲例, 輸出應爲:DlHelLoorW旋轉串,資本保持點/小持有點

大寫字母將保持它們的斑點和僅在彼此之間的那些點旋轉,同樣爲小寫字母

的第一個字母是H,下一個大寫字母L,在旋轉信H將採取L的現貨和L將採取W的部位等,同小字母

辦法,我做到了,拆串入兩個字符串,資本和小弦和充滿0 所以​​和capitalString = H0L00W000D空斑然後是應該旋轉它們的功能。我想點之間旋轉,哪裏有字母,所以smallString變得smallString = 0l0el0oor0capitalString = D0H00L000W,但我的函數將只需旋轉的所有字符

static void rotateString (char * a, int n) 

    { 
    int i, j; 
    char buffer[BUFSIZ] = { '\0' }; 
    for (i = n, j = 0; a[i] != '\0'; i++) 
     buffer[j++] = a[i], a[i] = '\0' ; 
    strcat (buffer , a), strcpy (a , buffer); 
    } 

我知道事情是這樣寫的,它不考慮在0反正,但我想添加一個if條件,但只有把事情弄得更糟

+1

目前還不清楚該示例輸入和輸出是如何相關的。 –

+0

@OliverCharlesworth編輯 –

+0

另一種方法如何?首先,瀏覽將輸入字符串分成兩部分的字符串:(A)一個大寫字母的字符串和(b)一個小寫字母的字符串。根據需要旋轉分離的字符串。然後遍歷輸入字符串,併爲每個字符從相應的旋轉字符串中選擇下一個字符並將其附加到結果中。 – HABO

回答

1

一種方法是跟蹤遇到的最後一個大/小寫字符和第一大/小寫字符的遭遇,你的指數遍歷字符串,測試每個字符。

See an example in action

請注意,我用你可能還沒有被教導着呢一些事情。希望這不會讓你感到困惑。

+0

對我而言,要誠實地對待你,這有點複雜,我會盡我所能去理解它是如何工作的。 隨意解釋它簡而言之:)將不勝感激 –

+0

@AhmadKhateeb'swapHold'函數用於交換'hold'空間中的字符與字符'a [i]'。如果第一個成員設置爲無效值,則將其設置爲字符串索引「i」,並且不會再次設置。 –

+0

在'rotateString'函數,我們有一個包含'hold'空間和'first'索引,一個用於大寫字母和一個小寫字母兩個結構的陣列,所以第一個大寫字母將在設置'first'其結構,第一個小寫字母將在其結構中設置「第一」。剩下的時間用來交換信件。 –