gpt4 book ai didi

c++ - 如何将 C 字符串拆分为 C 字符串数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:03 26 4
gpt4 key购买 nike

在C++中,我想做

char buffer[1024] = "command insert file1 file2 ..."

把它变成

*argv[0] = "command"
*argv[1] = "insert"
*argv[2] = "file1"

等等。有没有一些简单的方法可以做到这一点,比如 split() 或其他什么?我不能使用 boost 或 vectors,因为元素需要是 linux 库函数(如 execvp)的 c 字符串,并且它们需要在没有 boost 或任何额外库的服务器上编译

我在网上看到了使用strtok的例子,但是这些例子之后似乎没有存储值,只是打印出来。另一种方法似乎是一些复杂得可笑的方法,涉及循环和计算空格和转义字符。有没有更简单的方法?这让我抓狂。

编辑:作为引用,这是我的主要功能到目前为止的样子:

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;

void runCommand(char **argv);
void splitIntoArgs(char *command, char **argv);

int main()
{

char buffer[1024];
char *argv[5];

while (1)
{
// prompt user for command to run
cout << "Enter command: ";
cin >> buffer; //read the buffer
cout << endl;
splitIntoArgs(buffer, argv); //split the command into separate arguments
if (strcmp(argv[0], "exit") == 0)
return 0;
runCommand(argv);
}

}

最佳答案

你问这是一个 c++ 问题,那么你为什么不以标准库的形式使用 c++ 的强大功能,它为你提供 std::stringstd::vector

#include <vector>
#include <string>

std::vector<std::string> split(const std::string& str){
std::vector res;
size_t old_position = 0;
for(size_t position = 0; position = str.find(" ", position); position != std::npos){
res.push_back(res.substr(position, position-old_position));
old_position = position;
}
}

关于c++ - 如何将 C 字符串拆分为 C 字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23125357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com