我正在尝试用某些字符(空格,逗号或点)分隔的句子来检查它是否是回文。如果输入是“hello,potato。”,我将单独检查“hello”对称,然后单独检查马铃薯。
问题是,当我在循环的第一次迭代中搜索分隔符时,单词“hello”存储在子句中,但在第二次迭代中应该存储为“马铃薯“将是”马铃薯。“我无法删除“。”输入字符串末尾的分隔符。
for(int i=0;i<sentence.length();i++)
{
if(sentence[i]==' '||sentence[i]=='.'||sentence[i]==',')
{ //the couts is just to help me debug/trace
cout<<"i is now : "<<i<<endl;
if(i==delindex && i==sentence.length()-1)
{
subsentence=sentence.substr(temp+1,subsentence.length()-1);
}
else
{
subsentence=sentence.substr(delindex,i);
cout<<subsentence<<endl;
temp=delindex-1;
delindex=i+1;
}
}
}
最好的方法是什么?
答案 0 :(得分:2)
上帝保佑你,那个strtok就是我一直在寻找的
实际上,您不需要strtok
(并且出于各种安全原因应该避免使用它),因为std::string
有一个名为find_first_of的精彩方法,其行为非常类似于{{ 1}},就像它接受一堆字符并在任何字符上发现时返回索引。但是,为了制作强大的标记生成器,strtok
和find_first_not_of的组合在这种情况下更合适。
因此,您可以将令牌搜索简化为:
find_first_of