如何将字符串s转换为char * a[]?

4

我希望将

string s="aaa,bbb,ccc"

转化为:

char * a[]={"aaa", "bbb", "ccc"}

你能帮我想一下如何编写程序来处理这个过程吗?

我会尝试像这样编写程序:

string s="aaa,bbb,ccc";
char * a[];
char id[] = "";
strcpy(id, s.c_str());
const char * split = ",";
char * p;

    p = strtok(id, split);
    while (p != NULL) {
        int i = 0;
        printf("%s\n", p);
        a[i]=p;

        i++;
        p = strtok(NULL, split);
    }

我错在哪里?谁能指出?

这段话与IT技术相关性不强,可能是个人的疑问或者感叹。

2
无法实现,a 的维度需要在编译时确定。 - juanchopanza
请查看Boost Tokenizer:http://www.boost.org/doc/libs/1_58_0/libs/tokenizer/ - Hcorg
1
你能描述一下你想要通过这个实现什么吗? - Simon Kraemer
你写了这个名为 subdata 的函数吗?你能改变它吗,还是必须遵守现有的接口?你能展示一下 subdata 的声明吗? - Useless
subdata()是由第三方定义的,我只是引用它。 subdata(char *ppInstrumentID[], int nCount) - Baren
显示剩余2条评论
2个回答

2

我是编程新手,但我一直在做以下内容:

#include "stdafx.h"
#include <stdio.h>
#include <iostream>


int _tmain(int argc, _TCHAR* argv[])
{       
    std::string s = "aaa,bbb,ccc";

    // dynamically allocate memory for the char
    char * a = new char [s.length()+1];

    // the string needs to be copied into a
    std::strcpy(a, s.c_str());

    std::cout << a;

    // cleanup
    delete [] a;

    return 0;
}

编辑:刚刚注意到您想要将字符串的不同部分作为字符数组的元素,我的答案没有这样做。


2

我建议使用std::vector<std::string>来存储结果,而不是char* []。这样应该更有用。

因此,请尝试使用这个,它是纯C++标准库。

但如果你确实需要char* [],我建议编写一个转换函数:

char** ToCharArrays(const std::vector<std::string>& strings)
{
    char** cs = new char* [strings.size()];
    for (int i = 0, l = strings.size(); i < l; ++i)
    {
        cs[i] = const_cast<char*>(strings[i].c_str());
    }
    return cs;
}

使用案例如下:

std::string input("aaa,bbb,ccc");
std::vector<std::string> strings = Split(input, ',');
char** asCharArrays = ToCharArrays(strings);
YourAPINeedsCharArrays(asCharArrays, strings.size());
delete[] asCharArrays;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接