C将字符串拆分为stringarray

时间:2016-02-11 14:26:57

标签: c arrays strtok

我正在尝试创建一个带有字符串和数组的metod,并使用strtok()将字符串拆分为字符串数组。我假设给定的数组有足够的空间,并且当数组中有空格时进行拆分。我认为这几乎是正确的,我只需要最后一次推送:)这是我的代码atm:

string_to_stringarray(char* string, char** array) {

    int i = 0;
    array[i] = strtok(string, " ");

    while (array != NULL) {
        array[i++] = strtok(NULL, " ");
    }
}

4 个答案:

答案 0 :(得分:2)

while条件毫无意义。 array的值在函数中没有变化,因此循环是无限的(除非arrayNULL开始,在这种情况下第一次赋值给array[0]导致未定义的行为)。

应该是这样的:

size_t split_string(char *string, char **array) {
  size_t i = 0;

  char *token = strtok(string, " ");
  while (token != NULL)
  {
    array[i++] = token;
    token = strtok(NULL, " ");
  }
  return i;
}

这将返回找到的字符串数,并更改名称,因为用户代码无法定义以str开头的函数。

答案 1 :(得分:0)

while语句中的条件

while (array != NULL) {
       ^^^^^^^^^^^^^

是错误的,因为已经分配了来自帖子的数组。

该功能可以看起来像

void string_to_stringarray( char *string, char **array ) 
{
    int i = 0;

    array[i] = strtok( string, " " );

    while ( array[i] != NULL ) array[++i] = strtok( NULL, " " );
                                   ^^^
}

答案 2 :(得分:0)

我已经完成了与shell相似的事情我基本上已经完成在C ++中构建,除了我使用向量作为队列而不是数组。也许你可以从我已经证明有效的算法中反弹。

    int i = inputString.find_first_not_of(" ");
    int j = inputString.find_last_not_of(" \n\r");
    int k;
    string stringToAdd;

    while (i != -1) {
            k = i;

            while (inputString.at(k) != ' ') {

                    if (k == j) {
                            break;
                    };

                    k++;
            };

            if (k != j) {
                    k--;
            };

            stringToAdd = inputString.substr(i, k - i + 1);
            i = inputString.find_first_not_of(" ", k + 1);
            commandQueue.push_back(stringToAdd);
    };

答案 3 :(得分:0)

所以解决方案很明显,我在while循环中错过了[i]。

正确的行
while (array[i] != NULL){

感谢您的快速解答:)因为我没有取得任何进展,所以上床睡觉了