我想在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;
}
答案 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++;
}
注意:考虑使用s[c] += 'a'-'A'
作为s[c] = s[c] +32