Refactored arguments
This commit is contained in:
@ -14,19 +14,30 @@ class CmdWc : public Command {
|
||||
factory.add_rule("-w");
|
||||
}
|
||||
|
||||
virtual void run(std::istream& in, std::ostream& out, ArgManager& args) override {
|
||||
int count_chars(std::istream& in) {
|
||||
int i = 0;
|
||||
char c;
|
||||
while(in.get(c)) i++;
|
||||
return i;
|
||||
}
|
||||
|
||||
int count_words(std::istream& in) {
|
||||
int i = 0;
|
||||
char c;
|
||||
bool prev_space = true;
|
||||
while(in.get(c)) {
|
||||
i+= prev_space & !std::isspace(c);
|
||||
prev_space = std::isspace(c);
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
virtual void run(std::istream& in, std::ostream& out, ArgManager& args) override {
|
||||
bool prev_space = true;
|
||||
if(args.get("-c")) {
|
||||
while(in.get(c)) i++;
|
||||
out << i << "\n";
|
||||
out << count_chars(in) << "\n";
|
||||
} else if (args.get("-w")) {
|
||||
bool prev_space = true;
|
||||
while(in.get(c)) {
|
||||
if(std::isspace(c)) { prev_space = true; }
|
||||
else if(prev_space) { prev_space = false; i++;}
|
||||
}
|
||||
out << i << "\n";
|
||||
out << count_words(in) << "\n";
|
||||
} else {
|
||||
throw std::invalid_argument("Didn't provide flag");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user