细心应对长度不等的空格等问题即可
尽量使用 scanf("%s", s) 或者 gets(s) 读字符串,尽量不用scanf("%c", s) ,空格换行等问题处理起来非常麻烦

  • gets(s) 用于读取带空格的一整行文本,可以用在while循环中的条件判断
    • while(gets(s)) 效果和 while(~scanf(“%s”, s)) 类似,都可以处理多组数据

字符串长度尽量使用 strlen(s) 确定,少在循环中用 str[i] ,有时得不偿失

首字母大写

  1. #include <time.h>
  2. #include <iostream>
  3. #include <cstring>
  4. using namespace std;
  5. char s[105];
  6. void skip(int &idx) {
  7. while (s[idx] == ' ' or s[idx] == '\t' or s[idx] == '\r' or s[idx] == '\n')
  8. idx++;
  9. }
  10. void skip2(int &idx) {
  11. while (!(s[idx] == ' ' or s[idx] == '\t' or s[idx] == '\r' or s[idx] == '\n')) {
  12. // cout << s[idx] << endl;
  13. idx++;
  14. }
  15. }
  16. int main() {
  17. #ifdef SUBMIT
  18. freopen("in.txt", "r", stdin);
  19. freopen("out.txt", "w", stdout);
  20. long _begin_time = clock();
  21. #endif
  22. while (gets(s)) { // 处理多组数据
  23. int idx = 0, len = strlen(s);
  24. while (idx < len) {
  25. skip(idx); // 防止开头有空格
  26. // cout << s[idx] << endl;
  27. if (s[idx] >= 'a' && s[idx] <= 'z') {
  28. s[idx] = s[idx] - 'a' + 'A';
  29. }
  30. skip2(idx);
  31. }
  32. printf("%s\n", s);
  33. }
  34. #ifdef SUBMIT
  35. long _end_time = clock();
  36. printf("\n\ntime = %ld ms", _end_time - _begin_time);
  37. #endif
  38. return 0;
  39. }