使用std :: vecor <char *>获取execvp()Linux c ++的用户输入

时间:2016-02-17 21:08:04

标签: c++ linux vector

所以我有一个半工作程序,我用

读取用户输入
getline(std::cin, userinput, '\n')

然后我将输入发送到 std::vector<std::string> subStrs 分解用户的输入,以便每个命令元素是单独的

然后将它们全部推送到 std::vector<char*> params 所以我可以把它传递给execvp(..)

这对我来说效率非常低,但有没有更好的方法可以在没有所有中间步骤的情况下将用户输入到std::vector<char*>

1 个答案:

答案 0 :(得分:0)

这个解决方案似乎适用于我想要的东西。不确定它的解决方案有多棒。

std::vector<std::string> processString(std::string userInput)
{
   int j = 0;
   std::vector<std::string> subStrs;
   for (int i = 0; i < userInput.size(); i++)
   {
      bool sameSeq = false;
      if (isalnum(userInput[i]) || ispunct(userInput[i]))
      {
         subStrs.resize(subStrs.size() + 1);
         while (isalnum(userInput[i]) || ispunct(userInput[i]))
         {
            subStrs[j].push_back(userInput[i]);
            sameSeq = true; 
            i++;
         }
         if (sameSeq)
         {
            subStrs[j].push_back('\0');
            j++;   
         }
      }

   }
   return subStrs;
}