如何在数组中的指针中存储标记(strtok)

时间:2014-05-31 12:55:57

标签: c arrays pointers token

我仍然有一些问题,我想如果我设法解决这个问题,我将最终掌握它。

我有line我在分隔符空间strtok。现在我想将所有标记存储在数组char* tokens[50]上的指针中。如何将所有标记存储在此指针中,以及在存储后如何访问所有标记。我想我还需要一个计数器int token_count

2 个答案:

答案 0 :(得分:3)

这是直截了当的。例如:

char * tokens[50];
size_t n = 0;

for (char * p = strtok(line, " "); p; p = strtok(NULL, " "))
{
    if (n >= 50)
    {
        // maximum number of storable tokens exceeded
        break;
    }
    tokens[n++] = p;
}

for (size_t i = 0; i != n; ++i)
{
     printf("Token %zu is '%s'.\n", i, tokens[i]);
}

请注意,line必须指向可变字符串,因为strtok会破坏字符串。

答案 1 :(得分:-1)

为什么不在C ++ 11中使用正则表达式?您可以将一个空格(一个或多个)表示为一个简单的正则表达式" \ s +"并使用正则表达式令牌迭代器来迭代令牌,你可以将令牌存储在一个向量中。这是一个只打印出令牌的例子。

#include <regex>
#include <string>
#include <iostream>
using namespace std;


int main()
{

    regex re("\\s+");
    string s = "Token1 token2   token3"; //example string

    sregex_token_iterator reg_end;
    for(sregex_token_iterator it(s.begin(), s.end(), re, -1); it != reg_end; ++it) {
         cout << it->str() << endl;
    }
}