C++ 获取execvp()Linux c+;的用户输入+;使用std::vecor<;字符*>;
所以我有一个半工作程序,在那里我使用C++ 获取execvp()Linux c+;的用户输入+;使用std::vecor<;字符*>;,c++,linux,vector,C++,Linux,Vector,所以我有一个半工作程序,在那里我使用 getline(std::cin, userinput, '\n') 然后我将输入发送到 std::向量子序列 分解来自用户的输入,以便每个命令元素是独立的 然后把他们都推到一个 std::向量参数 所以我可以将它传递给execvp(…) 这对我来说似乎效率很低,但是有没有更好的方法让用户输入到std::vector,而不需要所有的中间步骤?这个解决方案似乎满足了我的需要。但不确定这是一个多么好的解决方案 std::vector<std::strin
getline(std::cin, userinput, '\n')
然后我将输入发送到
std::向量子序列
分解来自用户的输入,以便每个命令元素是独立的
然后把他们都推到一个
std::向量参数
所以我可以将它传递给execvp(…)
这对我来说似乎效率很低,但是有没有更好的方法让用户输入到
std::vector
,而不需要所有的中间步骤?这个解决方案似乎满足了我的需要。但不确定这是一个多么好的解决方案
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;
}
std::vector processString(std::string用户输入)
{
int j=0;
std::矢量子序列;
对于(int i=0;i
首先,您的程序应该简单易读,然后只有在性能有问题时,才应该优化iTunes。如果不处理数据,您可能只需要将一个进程的输出直接导入另一个进程。只有在您必须进行一些更改时,读取行才真正相关,否则它只是缓冲数据。例如,我必须允许用户键入ls-l>txt.txt并将ls-l传递给execvp(..),同时打开txt.txt以输出ls-lUnlessexecvp
在c++
下的操作与c
下的操作不同,它需要的是一个NULL
终止的char**args
[或char*argl[…]
]。我不确定vector
是否能直接提供这一点[如果是这样,一切都好]。因此,如果您试图跳过[多个]转换步骤,可能需要使用一些较低级别的函数。请看我最近的回答:因为函数与您需要的非常相似[使用stdin
而不是文件流并删除外部循环]。