首页 > 解决方案 > 如何处理保存在指针中的内存空间?

问题描述

我已经在指针中保存了保存在字符列表中的单词的地址。我正在使用 strtok 函数来获取由我设置的关键字分隔的单词。

#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;

int main() {
        unsigned int i, z;
        char sir[256];
        cin.getline(sir, 256);
        for(i = 0; i < strlen(sir); ++i){
                char * p = strtok(sir, " ,.");
                while(p != nullptr) {
                        // here i want to process the word.
                        p = strtok(sir, " ,.");
                }
        }

return 0;
}

我想要做的是处理这样的单词:让我们假设单词“StackOverflow”,我想从第一个字母“S”到最后一个字母“w”。我怎样才能做到这一点?

非常感谢,我希望很清楚我在问什么。

标签: c++pointers

解决方案


将输入更改为静态值;但只要把它关掉。

#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;

int main()
{
    unsigned int i, z;
    char sir[256] = "Thisissome ,.StackOverflow ,.sampletext";
    //cin.getline(sir, 256);
    char * p = strtok(sir, " ,.");
    std::string word("StackOverflow");
    do
    {
        printf ("%s\n",p);
        std::string test(p);
        if (word.compare(test) == 0)
        {
            printf("--> Found it!\n");
        }               
        p = strtok (NULL, " ,.-");
    } while(p != nullptr);
    return 0;
}

strtok 将字符串拆分为一系列标记。它不应该被连续调用使用原始字符数组来基于分隔符进行解析。(即 OP 中的 for(...) strtok(...) )。

初始调用需要一个 c 字符串作为参数;成功的调用需要一个 nullptr。每次连续调用一次;下一个值将从分隔符后的 c 字符串返回。

一旦找到一个空字符;函数调用将始终返回 nullptr (当 nullptr 是第一个参数时)。

由于该解决方案已经使用 C++,因此该解决方案使用 std::string 来显示每个单词序列将如何出现;并且可以与一个标记词进行比较。

返回给 p 的值仍然只是一个 char*,因此 OP 可以决定如何使用 strtok 返回的值。该示例旨在简单地显示使用 strtok 返回分隔的单词;以及查看该词是否为“StackOverflow”的简单解决方案


推荐阅读