Start learning free

LESSON 383 OF 413 · PROJECTS: COMMAND-LINE TOOLS

CLI Tool: wc v4 — Mode Flag in C#

Practice

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:

public string Wc(List<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 in a single pass through lines, then branch on mode to pick the return value.

int numLines = lines.Count;
int numWords = 0;
int numChars = 0;
foreach (string line in lines) {
    string trimmed = line.Trim();
    if (trimmed.Length > 0) { numWords += trimmed.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Length; }
    numChars += line.Length;
}
Use .ToString() to convert numbers to strings.

The full solution:
class Solution {
    public string Wc(List<string> lines, string mode) {
        int numLines = lines.Count;
        int numWords = 0;
        int numChars = 0;
        foreach (string line in lines) {
            string trimmed = line.Trim();
            if (trimmed.Length > 0) { numWords += trimmed.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Length; }
            numChars += line.Length;
        }
        if (mode == "l") { return numLines.ToString(); }
        if (mode == "w") { return numWords.ToString(); }
        if (mode == "c") { return numChars.ToString(); }
        return numLines + "\t" + numWords + "\t" + numChars;
    }
}

STEP 1 OF 11
    Ctrl + Enter to check

    Wc V4 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