Combine the previous three versions of wc. Given a list of lines and a mode flag, return the requested count(s) as a string. This is our own simplified interface, not the real wc flags: the real tool combines flags (such as -lw) and pads its columns with spaces.
Function signature:
string wc(vector<string> lines, string mode)
Mode values:
"l"→ line count, as a string."w"→ word count (whitespace-separated tokens), as a string."c"→ character count (lines only, no separating newlines), as a string."all"→lines + "\t" + words + "\t" + chars.
The "c" count is the one from v3 (the sum of the line lengths, no newlines). Any other mode value, for example "x" or "L" (modes are case-sensitive), gives the same result as "all". For an empty list, "l", "w" and "c" give "0" and "all" gives "0<TAB>0<TAB>0". The input is plain ASCII text.
Example:
Input: lines = ["hello", "world"], mode = "all" Output: "2\t2\t10"
2 lines, 2 words (one per line), 10 characters total.
Compute all three counts upfront. Use
istringstream for the word count and .size() for the character count. Branch on the mode string at the end.
int numLines = lines.size();
int numWords = 0;
int numChars = 0;
for (int i = 0; i < lines.size(); i++) {
istringstream ss(lines[i]);
string word;
while (ss >> word) numWords++;
numChars += lines[i].size();
}
Use to_string(int) to convert numbers to strings.
The full solution:
class Solution {
public:
string wc(vector<string> lines, string mode) {
int numLines = lines.size();
int numWords = 0;
int numChars = 0;
for (int i = 0; i < lines.size(); i++) {
istringstream ss(lines[i]);
string word;
while (ss >> word) numWords++;
numChars += lines[i].size();
}
if (mode == "l") return to_string(numLines);
if (mode == "w") return to_string(numWords);
if (mode == "c") return to_string(numChars);
return to_string(numLines) + "\t" + to_string(numWords) + "\t" + to_string(numChars);
}
};
Free plan: 30 tutor messages. Premium is unlimited.
