从 C 字符串中消除空格
在 C 中,从字符串中删除空格是一项常见任务。一种简单的方法是迭代字符并手动构造一个新字符串。然而,有一个更有效的解决方案。
算法
C STL 提供了一个强大的算法,称为remove_if,可以用于此目的。该算法采用一个谓词函数来确定是否应该删除某个元素,然后从容器中删除所有此类元素。
在这种情况下,我们感兴趣的谓词函数是 isspace,它对于空白返回 true字符,否则为 false。通过将remove_if应用于带有isspace谓词的字符串,我们可以消除所有空白字符。
实现
使用remove_if删除空白字符后,我们需要将字符串缩小到新的大小。这可以使用擦除方法来实现。以下是此方法的完整实现:
#include <algorithm> #include <string> void remove_spaces(std::string& str) { str.erase(std::remove_if(str.begin(), str.end(), std::isspace), str.end()); }
remove_if 的自定义实现
STL 中的remove_if 算法是一个可以应用于容器的通用函数超越弦。但是,对于像这样的特定用例,实现针对字符串定制的自定义版本可能会更方便:
template <typename T> T remove_if(T beg, T end, std::function<bool(char)> pred) { T dest = beg; for (T itr = beg; itr != end; ++itr) { if (!pred(*itr)) { *(dest++) = *itr; } } return dest; }
此自定义实现模仿 STL remove_if 算法的行为,可以使用专门针对基于字符的容器,例如 std::string。
以上是如何有效地删除 C 字符串中的空格?的详细内容。更多信息请关注PHP中文网其他相关文章!