修剪/删除字符串中的选项卡("\ t")

And*_*yUK 10 c++ string tabs

任何人都可以建议一种从字符串中剥离制表符("\ t")的方法吗?CString或std :: string.

例如,"1E10"变为"1E10".

谢谢你的期待.

Luc*_*lle 20

如果要删除字符串中的所有出现,则可以使用擦除/删除习语:

#include <algorithm>

s.erase(std::remove(s.begin(), s.end(), '\t'), s.end());
Run Code Online (Sandbox Code Playgroud)

如果只想删除字符串开头和结尾处的选项卡,可以使用boost字符串算法:

#include <boost/algorithm/string.hpp>

boost::trim(s); // removes all leading and trailing white spaces
boost::trim_if(s, boost::is_any_of("\t")); // removes only tabs
Run Code Online (Sandbox Code Playgroud)

如果使用Boost是太多开销,您可以使用find_first_not_offind_last_not_of字符串方法滚动自己的trim函数.

std::string::size_type begin = s.find_first_not_of("\t");
std::string::size_type end   = s.find_last_not_of("\t");

std::string trimmed = s.substr(begin, end-begin + 1);
Run Code Online (Sandbox Code Playgroud)


j_r*_*ker 19

hackingwords的回答让你半途而废.但是std::remove()<algorithm>实际上并没有做任何字符串短-它只是返回一个迭代说:"新的序列将在这里结束." 你需要打电话my_string().erase()来做到这一点:

#include <string>
#include <algorithm>    // For std::remove()

my_str.erase(std::remove(my_str.begin(), my_str.end(), '\t'), my_str.end());
Run Code Online (Sandbox Code Playgroud)


Kon*_*lph 6

remove算法将所有不删除的字符移到开头,覆盖已删除的字符,但不会修改容器的长度(因为它适用于迭代器,不知道底层容器).为此,请致电erase:

str.erase(remove(str.begin(), str.end(), '\t'), str.end());
Run Code Online (Sandbox Code Playgroud)