问题链接:HDU2026 首字母变大写。
问题描述:参见上述链接。
问题分析:这是一个字符串输入处理问题,也是一个基本的输入处理训练问题。
程序说明:通过这个例子,可以知道C++程序中如何读入一行,如何判定输入结束(文件结束),以及如何用库函数进行字母判定和大小写转换。
如果用C语言来写这个程序,则是另外一番风景,参见后面给出的代码。由于新标准库函数中,gets()不被推荐使用,所有编写了自己的函数mygets()。
AC的C++语言程序如下:
/* HDU2026 首字母变大写 */ #include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s; while(getline(cin, s)) { if(islower(s[0])) s[0] = toupper(s[0]); for(int i=1, len=s.length(); i<len; i++) { if(s[i-1] == ' ' && islower(s[i])) s[i] = toupper(s[i]); } cout << s << endl; } return 0; }
AC的C语言程序如下:
/* HDU2026 首字母变大写 */ #include <stdio.h> #define MAXN 100 #define DELTA 'a'-'A' int mygets(char s[]) { int i = 0; char c; while((c = getchar()) && c != '\n' && c != EOF) s[i++] = c; s[i] = '\0'; return i > 0 || c != EOF; } int main(void) { char s[MAXN+1]; int i; while(mygets(s)) { if('a' <= s[0] && s[0] <= 'z') s[0] -= DELTA; for(i=1; s[i]!='\0'; i++) { if(s[i-1] == ' ' && 'a' <= s[i] && s[i] <= 'z') s[i] -= DELTA; } printf("%s\n", s); } return 0; }