细心应对长度不等的空格等问题即可
尽量使用 scanf("%s", s) 或者 gets(s) 读字符串,尽量不用scanf("%c", s) ,空格换行等问题处理起来非常麻烦
gets(s)用于读取带空格的一整行文本,可以用在while循环中的条件判断- while(gets(s)) 效果和 while(~scanf(“%s”, s)) 类似,都可以处理多组数据
字符串长度尽量使用 strlen(s) 确定,少在循环中用 str[i] ,有时得不偿失
首字母大写
#include <time.h>#include <iostream>#include <cstring>using namespace std;char s[105];void skip(int &idx) {while (s[idx] == ' ' or s[idx] == '\t' or s[idx] == '\r' or s[idx] == '\n')idx++;}void skip2(int &idx) {while (!(s[idx] == ' ' or s[idx] == '\t' or s[idx] == '\r' or s[idx] == '\n')) {// cout << s[idx] << endl;idx++;}}int main() {#ifdef SUBMITfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);long _begin_time = clock();#endifwhile (gets(s)) { // 处理多组数据int idx = 0, len = strlen(s);while (idx < len) {skip(idx); // 防止开头有空格// cout << s[idx] << endl;if (s[idx] >= 'a' && s[idx] <= 'z') {s[idx] = s[idx] - 'a' + 'A';}skip2(idx);}printf("%s\n", s);}#ifdef SUBMITlong _end_time = clock();printf("\n\ntime = %ld ms", _end_time - _begin_time);#endifreturn 0;}
