2016-09-26 170 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