【问题标题】:How to keep a pointer to each word in an array of character pointers?如何在字符指针数组中保留指向每个单词的指针?
【发布时间】:2018-10-17 22:21:01
【问题描述】:

标题几乎说明了一切。我只是好奇你会怎么做。我在网上查了一下,我发现的东西并不一定会给我明确的答案,因为它们似乎不是我真正想要的。希望有人可以提供帮助。

【问题讨论】:

  • strtok,可以自动解析cstring,确保数组保持在范围内并且不变。否则,为每个返回的指针分配/复制。如果您已经在缓冲区中有句子(单词),那么只需遍历缓冲区,将每个单词的开头地址分配给您的指针数组。该网站上已经有至少 400 个示例。搜索strtok
  • 到目前为止你有什么尝试?发布您的代码。
  • @SidS 这就是我不知道从哪里开始的问题。我需要在几行中输入一堆单词(我假设这意味着您输入“hello world”,按回车,输入另一个字符,按回车,重复)。但是,我还需要在不使用任何数组的情况下按照标题的说明进行操作(即 char ** arr = new char[SIZE];)。到目前为止,我所看到的一些东西让我受益匪浅,或者并不是我正在寻找的东西。我真的只需要指出正确的方向。
  • 表现出一些努力。

标签: c++ arrays pointers char


【解决方案1】:

这将是我的方法。确保在堆上分配了char *str,这样向量中​​的指针就不会悬空。

std::vector<char*> word_pointers(char *str)
{
    std::vector<char*> words;        // to store pointers to beginning of words

    bool start = true;               // marks start of word

    for (int i = 0; str[i]; ++i)     // expects null-terminated string
    {
        if (start && str[i] != ' ')
            words.push_back(str + i);

        start = (str[i] == ' ');     // is the next character qualified for word
     }

     return words;
}

请注意,向量的 char * 元素仅在 str 的末尾终止。另一种方法是用\0 替换空格,但这样就很难读取整个字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 2021-06-28
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多