【发布时间】:2018-03-05 21:26:15
【问题描述】:
我正在尝试获取由某些字符(空格、逗号或点)分隔的句子,以检查它是否是回文。如果输入是“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;
}
}
}
最好的方法是什么?
【问题讨论】:
-
@JCollier 像马铃薯一样。最后有一个点(分隔符)我想要没有点
-
虽然有一种非常简单的方法可以使用
.begin()和.rbegin()来推断回文,但解析多个分隔符仍然最好由strtok 处理,由<cstring>提供。getline允许使用结束分隔符,但不允许使用多个分隔符。 -
@DavidC.Rankin 上帝保佑你,我一直在寻找 strtok
-
这是自切片面包以来最伟大的事情,用于标记字符串(在
<cstring>标头中可以找到许多在 C++ 中没有直接对应类的块)跨度>
标签: c++ string substring delimiter