如何检查最后一个子字符串是否为值,如果是,则将其删除

时间:2014-12-19 19:11:45

标签: c++

我需要删除"时间"来自某些字符串,如果它作为最后一个子字符串存在。解决方案需要适用于这些情况:

    "AmpliTime"               =>   "Ampli"
    "IsoTimeTime"             =>   "IsoTime"
    "SometypeTimeAndThenTime" =>   "SometypeTimeAndThen"
    "SometypeTimeAndThenTimeAbc" =>   "SometypeTimeAndThenTimeAbc"

我尝试过这样的事情,但是如果“Time”这个词出现在除了结尾之外的其他地方,它会遇到问题。

long start = s.find("Time");
if (start > 0)
{
    printf("%d\n", start);
    s.erase(start, 5);
}
printf("%d\n", start);

1 个答案:

答案 0 :(得分:3)

rfind可能效率低下,因为在字符串Time结尾的情况下,它会继续搜索字符串。

但是,

compare会查看您感兴趣的字符串部分:

if (s.size() >= 4 && s.compare(s.size()-4, 4, "Time") == 0) {
    s.resize(s.size() - 4);
}

如您所见,我在代码中使用了数字4四次。可疑的风格,但它完成了工作。我已经决定对于一个固定字符串如此短的情况,这比将长度放在一个变量中更清楚,但是YMMV。