CS1010 Notes
  • Welcome
  • Lec/Tut/Lab/Exes
    • Lecture
      • Lec 01 - Computational Problem Solving
      • Lec 02 - Functions and Types
      • Lec 03 - Basic C Programming
      • Lec 04 - Conditionals
      • Lec 05 - Loops
      • Lec 06 - Call Stacks, Arrays
        • Diagnostic Quiz
      • Lec 07 - Pointers, Memory management
        • Diagnostic Quiz
      • Lec 08 - Multi-d Array, Efficiency
        • Diagnostic Quiz
      • Lec 09 - Searching and Sorting
        • Diagnostic Quiz
      • Lec 10 - More Recursion
        • Diagnostic Quiz
      • Lec 11 - Strcut & Standard I/O
        • Diagnostic Quiz
      • Lec 12 - Recap
    • Tutorial
      • Tut 01 - Computational Problem-Solving
      • Tut 02 - Functions and Conditionals
      • Tut 03 - More on Conditionals
      • Tut 04 - Loops
      • Tut 08 - Searching and Sorting
    • Lab
      • Lab 01 - Unix/Vim Setup
      • Lab 02 - Debugging
      • Lab 03 - Assert
      • Lab 04 - Test Cases
      • Lab 05 - Arrays
      • Lab 06 - Memory Errors
      • Lab 07 - Compiling with Clang
      • Lab 08 - C Preprocessor
      • Lab 09 - Backtracking
      • Lab 10 - Struct and Wrap up
    • Exercises
      • Exercise 3 - Fixed-Length Arrays
      • Exercise 4 - Dynamic Arrays and Strings
      • Exercise 6 - Searching and Sorting
      • Exercise 7 - More Recursion
      • Exercise 8 - Struct
  • Past Year Exam
    • Midterm PE
      • PE1 (AY18/19)
      • PE1 (AY20/21)
      • PE1 (AY21/22)
      • PE0 (AY22/23)
      • PE0 (AY23/24)
    • Midterm Paper
      • Midterm (AY18/19)
      • Midterm (AY20/21)
      • Midterm (AY21/22)
      • Midterm (AY22/23)
    • PE1 Review
      • PE1 (AY23/24)
    • PE2 Review
      • PE2 (AY18/19)
      • PE2 (AY20/21)
      • PE2 (AY21/22)
      • PE2 (AY22/23)
      • PE2 (AY23/24)
    • Final Paper
      • Final (AY18/19)
      • Final (AY20/21)
      • Final (AY21/22)
      • Final (AY22/23)
      • Final (AY23/24)
  • Current Year Exam
    • PE0 (AY24/25)
    • PE1 (AY24/25)
    • PE2 (AY24/25)
    • Final (AY24/25)
  • Toolbox
    • Vim & Unix
    • GDB
  • After CS1010
Powered by GitBook
On this page
  • Problems
  • 3. Markup
Edit on GitHub
  1. Current Year Exam

PE1 (AY24/25)

PreviousPE0 (AY24/25)NextPE2 (AY24/25)

Last updated 7 months ago

Problems

3. Markup

This question utilizes the function , where the i position variable is crucial! After knowing this function, I rewrite my solution as follows

void markup(char *line)
{
  long line_len = (long)strlen(line);
  long times = 0;
  for (long i = 0; i < line_len; i += 1)
  {
    if (times >= 1)
    {
      if (is_match(line, (size_t)i, START))
      {
        i += 3-1;
        times += 1;
      }
      else if (is_match(line, (size_t)i, END))
      {
        i += 4-1;
        times = 0;
      }
      else if (is_lower(line[i]))
      {
        putchar(to_upper(line[i]));
      }
      else
      {
        putchar(line[i]);
      }
      continue;
    }
    if (is_match(line, (size_t)i , START))
    {
      i += 3-1;
      times += 1;
    }
    else if (is_match(line, (size_t)i, END))
    {
      i += 4-1;
      times = 0;
    }
    else
    {
      putchar(line[i]);
    }
  }
}

The idea is to set a variable times indicating we have encountered an open <U> and we should start printing the upper case letters. And once we encounter a closing </U>, we set our times to be 0. And notice that the awesome point of the position i is that we deal with one character at a time!

is_match()