子字符串和分隔符

时间:2018-03-05 21:26:15

标签: c++ string substring delimiter

我正在尝试用某些字符(空格,逗号或点)分隔的句子来检查它是否是回文。如果输入是“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;
                }
        }
      }

最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

  

上帝保佑你,那个strtok就是我一直在寻找的

实际上,您不需要strtok(并且出于各种安全原因应该避免使用它),因为std::string有一个名为find_first_of的精彩方法,其行为非常类似于{{ 1}},就像它接受一堆字符并在任何字符上发现时返回索引。但是,为了制作强大的标记生成器,strtokfind_first_not_of的组合在这种情况下更合适。

因此,您可以将令牌搜索简化为:

find_first_of

https://ideone.com/rhMyvG