Start learning free

LESSON 370 OF 409 · PROJECTS: COMMAND-LINE TOOLS

CLI Tool: cat v3 — Show Special Chars (-A) in C++

Practice

Now build the -A flag of the cat tool, as a new function. It makes whitespace visible: every tab character (\t) is replaced by the two characters ^I and every line ends with a literal $ marker (so trailing spaces become obvious). Lines are then joined with newlines.

Note: real cat -A also shows other control characters (such as ^M) and non-ASCII bytes; this version only handles tabs and line ends, like cat -T -E. A blank line becomes just $, and an empty list gives an empty string.

Function signature:

string showAllCat(vector<string> lines)

Example:

Input: lines = ["hello\tworld", "foo"]

Output: "hello^Iworld$\nfoo$"

When printed:
hello^Iworld$
foo$

Another example (a blank line, trailing spaces):

Input: lines = ["a\t", "", "x  "]

Output: "a^I$\n$\nx  $"

When printed:
a^I$
$
x  $

There's no built-in replace, so walk each line character by character. When you see a '\t', append "^I"; otherwise append the character itself. After the inner loop, append "$".

Inner transformation:
string transformed;
for (char c : line) {
    if (c == '\t') transformed += "^I";
    else transformed += c;
}
result += transformed + "$";


The full solution:
class Solution {
public:
    string showAllCat(vector<string> lines) {
        string result;
        for (int i = 0; i < lines.size(); i++) {
            if (i > 0) result += "\n";
            string line = lines[i];
            string transformed;
            for (char c : line) {
                if (c == '\t') transformed += "^I";
                else transformed += c;
            }
            result += transformed + "$";
        }
        return result;
    }
};

STEP 1 OF 10
    Ctrl + Enter to check

    Cat V3 in C++

    Keep going with C++About 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free