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

标签 c++

我需要从一些字符串中删除“Time”,如果它作为最后一个子字符串存在。该解决方案需要适用于这些情况:

    "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);

最佳答案

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

但是,

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

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

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

关于c++ - 如何检查最后一个子字符串是否是一个值,如果是则将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27572463/

相关文章:

c++ - 从 std::exception 继承而不改变用户代码

c++ - 在 Qt 中将十六进制字符串转换为 Ascii

c++ - 简单、高效的弱指针,在释放目标内存时设置为 NULL

c++ - Qt 必须在 QWidget 之前构造 QApplication

c++ - 位域可以用作“穷人的”快速整数类型吗?

C++ Sqlite select 语句并存储为 vector

c++ - move 语义无意中被封装指针的类中的复制构造函数取代

java - 从哪里可以从诺基亚相机示例应用程序获取流式(实时)视频和音频?

c++ - 从 IDE 调用 Makefile 进行调试/发布

c++ - visual studio 2010 在 float /双增量上显示奇怪的行为