Advertisement
akela43

split pipe input

Mar 20th, 2023
560
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | Help | 0 0
  1. #include <string>
  2. #include <vector>
  3. #include <sstream>
  4. #include <iostream>
  5. using VS = std::vector<std::string>;
  6. using VVS = std::vector<VS>;
  7. using VChars = std::vector<const char*>;
  8. using VVChars= std::vector<VChars>;
  9. VS split(const std::string &s, const char delimiter)
  10. {
  11.     std::stringstream ss(s);
  12.     std::string segment;
  13.     VS lst;
  14.     while(std::getline(ss, segment, delimiter))
  15.         if (segment.size())
  16.            lst.push_back(segment);
  17.     return lst;
  18.  
  19. }
  20. int main(int argc, char *argv[])
  21. {
  22.   std::string inp;
  23.   std::getline(std::cin, inp);
  24.   VS segPipes = split(inp, '|');
  25.   VVS vCmds;
  26.   VVChars vCommands;
  27.   for (unsigned i = 0; i < segPipes.size(); ++i)
  28.   {   vCmds.push_back(split(segPipes[i], ' '));  }
  29.  
  30.   for (unsigned i = 0; i <vCmds.size(); ++i)
  31.   {
  32.      VChars v;
  33.      for (unsigned k = 0; k < vCmds[i].size(); ++k)
  34.      {
  35.          v.push_back(vCmds[i][k].c_str());
  36.      }
  37.          v.push_back((char*)NULL);
  38.      vCommands.push_back(v);
  39.   }
  40.  
  41.   for (auto & v:vCommands)
  42.   {
  43.      for(auto &s:v) if (s) std::cout << s<< " ";
  44.         else std::cout << "NULL ";
  45.  
  46.      std::cout <<"|" <<  std::endl;
  47.   }
  48.   return 0;
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement