【发布时间】:2020-11-02 06:43:50
【问题描述】:
我正在开发一个需要用户输入两次的程序。用户将输入一个句子,然后输入一个关键短语以删除整个句子中找到的每个匹配项,并返回剩下的内容。我在下面的“逻辑”代码是...
char delim[AFFIX];
strcpy(delim, userInput); //storing the phrase user wants to remove
char *token = strtok(sentence, delim);
while (token)
{
cout << token << endl;
token = strtok(NULL, delim);
}
我遇到的问题是 strtok 会删除找到的每个字符实例。例如,如果用户希望删除“pre”的所有实例,那么单词“preformed”将变成“fo m d”而不是formed。有没有办法限制 strtok 删除找到的每个字符实例,而只删除一系列字符?
我知道使用字符串或向量会使我的生活更轻松,但我想使用字符数组。如果这还不够清楚,我真的很抱歉,我对 c++ 很陌生。任何有关如何解决此问题的建议将不胜感激。感谢您的宝贵时间。
【问题讨论】:
-
strtok()旨在以这种方式工作。我建议仅将strtok()与分隔符的第一个字符一起使用(在本例中为p)。然后在找到每个字符后,将该点的原始字符串与分隔符字符串进行比较。 -
您可以使用
strstr在sentence中查找delim的下一个匹配项。但是,是的,std::string会让你的生活更轻松 ;)