要点:1.小写字母-32就是大写字母【对应ascal表】
2.putchar完了过后就可以getchar了,避免出错。
3.变大写的情况:1.首字母:特点它的字母前面【‘前面’用另一个变量表示】有空格2.第一个字母大写【flag=1时,代表新的开头,所以判断是不是小写;flag=0时,正常输出即可】,当然我们也可以char[i-1]与char[i]。
/*单词首字母大写*/
#include <stdio.h>
int main() {
int ch, flag = 1;
ch = getchar();
while (ch != '\n') {
if (flag == 1) {//这里的flag是依据着之前的ch的字符,来判断是不是新开头的字母
if (ch >= 'a' && ch <= 'z') {
ch -= 32;
flag = 0;
} else {
flag = 0;
}
}
if (ch == ' ') {
flag = 1;//预示着【下一位】小写变大写
}
putchar(ch);//无论标志(flag)怎么变,这一次的输出还是不变。
ch = getchar();
}
return 0;
}
我同学的:
#include<stdio.h>
int main(){
char ch,prew=' ';
while((ch=getchar())!='\n'){
if (ch>='a'&&ch<='z'&&prew==' ') ch-=32;
printf("%c", ch);//注意这两步顺序
prew=ch;//由于prew慢了一步,所以ch到下一个字母开头时prew仍然是空格,很巧妙!
}
return 0;
}
!!!羡慕,总要超过你!!