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;
}
};
Free plan: 30 tutor messages. Premium is unlimited.
