fork download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. const int MAX_SIZE = 1000;
  6.  
  7. bool isLetter(char c) {
  8. return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
  9. }
  10.  
  11. bool isBigLetter(char c) {
  12. return c >= 'A' && c <= 'Z';
  13. }
  14.  
  15. bool isSmallLetter(char c) {
  16. return c >= 'a' && c <= 'z';
  17. }
  18.  
  19. bool checkCaps(char text[]) {
  20. char word[100] = {0};
  21. strcpy(word, text);
  22. int n = strlen(word);
  23. for (int i = 0; i < n; ++i) {
  24. if (isBigLetter(word[i])) {
  25. word[i] = word[i] + ('a' - 'A');
  26. }
  27. }
  28. return (strcmp(word, "caps") == 0);
  29. }
  30.  
  31. void processWords(char text[], bool &capsLock) {
  32. int n = strlen(text), lettersCount = 0;
  33. bool isWord = false;
  34. for (int i = 0; i <= n; ++i) {
  35. if (isLetter(text[i])) {
  36. if (capsLock) {
  37. if (isSmallLetter(text[i])) {
  38. text[i] = text[i] - ('a' - 'A');
  39. }
  40. } else {
  41. if (isBigLetter(text[i])) {
  42. text[i] = text[i] + ('a' - 'A');
  43. }
  44. }
  45. isWord = true;
  46. ++lettersCount;
  47. } else if (isWord) {
  48. char temp = text[i];
  49. text[i] = 0;
  50. if (checkCaps(text + i - lettersCount)) {
  51. text[i] = temp;
  52. text[i - lettersCount] = ' ';
  53. for (int j = i - lettersCount + 1; j + 3 <= n; ++j) {
  54. text[j] = text[j + 3];
  55. }
  56. i -= 3;
  57. if (capsLock) {
  58. capsLock = false;
  59. } else {
  60. capsLock = true;
  61. }
  62. } else {
  63. text[i] = temp;
  64. }
  65. isWord = false;
  66. lettersCount = 0;
  67. }
  68. }
  69. }
  70. /*
  71. textul mic ACUM ESTE
  72. MAREEE , nu-i asa?
  73. */
  74. int main() {
  75. char text[MAX_SIZE + 1] = {0};
  76. bool capsLock = false;
  77. while (cin.getline(text, MAX_SIZE + 1)) {
  78. processWords(text, capsLock);
  79. cout << text << "\n";
  80. }
  81. return 0;
  82. }
Success #stdin #stdout 0s 5288KB
stdin
Textul MIC caps acum este
mareEE Caps, nu-I asa?
stdout
textul mic   ACUM ESTE
MAREEE  , nu-i asa?