细心应对长度不等的空格等问题即可
尽量使用 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 SUBMIT
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
long _begin_time = clock();
#endif
while (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 SUBMIT
long _end_time = clock();
printf("\n\ntime = %ld ms", _end_time - _begin_time);
#endif
return 0;
}