大小写功能C.

时间:2016-09-26 16:58:46

标签: c function

我想在C中编写一个程序,它将使用函数将文本的字母从大写更改为小写,但它会将每个句子的首字母保留为大写。 对于exaple LEAF。是什么?绿色!我需要将它转换为Leaf.Is?绿色!

#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;
}

1 个答案:

答案 0 :(得分: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

的更具可读性的替代方案