从字符串中移除引号

C++:
从字符串中移除引号

如何操作:

这是一个在C++中除掉引号的简单方法:

#include <iostream>
#include <algorithm>

std::string remove_quotes(std::string input) {
    input.erase(std::remove(input.begin(), input.end(), '\"'), input.end());
    input.erase(std::remove(input.begin(), input.end(), '\''), input.end());
    return input;
}

int main() {
    std::string original = R"("Hello, 'World'!")";
    std::string no_quotes = remove_quotes(original);
    std::cout << no_quotes << std::endl;
    return 0;
}

运行这个,你会得到:

Hello, World!

瞧!引号消失了。

深入探究

自计算机黎明时期以来,引号一直是文本上的一个麻烦。在过去,你会看到程序员务必循环遍历每个字符来过滤掉那些引号。今天,我们有了标准模板库(STL)中的 std::remove 来做这个繁重的工作。

有替代方法吗?当然!你可以使用 std::regex 的正则表达式来针对引号,但这有点像用大锤子砸核桃——强大,但对于简单任务可能是过度杀伤的。对于那些偏好最近C++版本的人,你可能会尝试使用 std::string_view 进行非修改性方法。

在实施上,要记住, std::remove 实际上并不会从容器中删除元素;它将未被删除的元素向前移动,并返回一个迭代器,这个迭代器位于新范围的末尾之后。这就是为什么我们需要使用 erase 方法来切掉不想要的尾巴。

参见