2016-09-26 165 views
-1

我想用C語言編寫一個程序,它將使用函數將文本的字母從大寫變爲小寫,但它會使每個句子的首字母保持大寫。 適用於LEAF。是什麼?綠色!我需要將其轉換爲Leaf.Is?綠色!大寫字母小寫函數C

#include <stdio.h> 

char upper_to_low(char s[]) { 
    int c = 0; 
    while (s[c] != '\0') { 
     if ((s[c] >= 'A' && s[c] <= 'Z') && c > 0) { 
      s[c] = s[c] + 32; 
     } 
     c++; 
    } 
} 

int main() { 
    char text[100]; 

    printf("Text\n"); 
    gets(text); 
    upper_to_lower(text); 
    printf("This is the text\n %s", text); 
    return 0; 
} 
+0

那麼上面給出的輸出是什麼? –

+0

如果我寫的葉子是綠色的。輸出是葉子是綠色的。所以它適用於第一句,因爲它跳過了第一個字符。 – Nica

回答

3

那是因爲你的&& c>0條件,這將跳過第一個字母,但不「復位」,讓你後跳過任何信件。

您可以添加一個標誌,表示如果接下來的文字應該被轉換,這樣的:

int c = 0; 
int shouldConvert = 0; 
while (s[c] != '\0') { 
    if (s[c] >= 'A' && s[c] <= 'Z') { 
     if (shouldConvert) { 
      s[c] += 'a'-'A'; 
     } else { 
      shouldConvert = 1; 
     } 
    } else { 
     shouldConvert = 0; 
    } 
    c++; 
} 

Demo.

注:考慮使用s[c] += 'a'-'A's[c] = s[c] +32

更具可讀性的替代方案
+0

@Nica這不是你所抱怨的,還是我誤解了「但它會讓每個句子的首字母都爲大寫」部分?儘管如此,你的意思是把第一個字母改爲大寫字母並不合適。 – dasblinkenlight

+0

這個新要求使整個代碼無效。現在您需要解析標點符號的句子。 –

+0

@EugeneSh。非大寫解析也可以工作(這就是我的代碼所做的)。 – dasblinkenlight