Strtok和忽略用户名的能力?

时间:2018-02-22 01:51:42

标签: c++ strtok

所以我目前正在做一个项目,我们需要按字解析句子(更具体地说是推文),并将单词和单词本身的频率存储在一个向量对中(使用自定义查找函数来增加频率)

我目前正在使用strtok来解析句子,我想知道你是否可以在它们的开头插入任何带有符号@的单词。我目前有strtok函数的分隔符作为一堆非有用的符号和空格!@#&()–[{}]:;',?/*\".+\\^并且它正确地忽略它们,但是我说有一个词:@thisismyusername,有没有办法忽略整个单词,包括'thisismyusername'而不只是@

我一直在寻找类似这样的文档,但还没找到任何东西。

这是我的strtok解析代码:

char* tempMap;
tempMap = strtok (tempHolderPos," !@#&()–[{}]:;',?/*\".+\\^");

* tempHolderPos是完整的句子。

谢谢你们!

2 个答案:

答案 0 :(得分:1)

你可以做到这一点。例如,以下内容适用于您的strtok循环:

someloop {
    ptr = strtok (NULL, yourdelims); 
    if (*ptr == '@')
        continue;` 
    ...
}

strtok获取令牌后,您只需检查第一个字符是否为'@',如果是,请在此时获取下一个字词 - 实际上忽略以{{1开头的字词}}。

回想一下,当您取消引用字符指针时,您将获得该字符本身。当调用'@'变量名称(指针的起始地址)时,您将获得第一个字符。因此,您只需取消引用指向令牌的指针并检查第一个char是否为char *,如果是,请转到下一个单词,跳过对令牌执行的所有其他处理。

答案 1 :(得分:0)

查看strtok引用,我认为你不能直接直接。很容易忽略以@开头的任何令牌,只是继续而不保存它。