有人可以建议从字符串中删除制表符(“\ t”s)的方法吗? CString或std :: string。
例如,“1E10”变为“1E10”。
感谢您的期待。
答案 0 :(得分:20)
如果要删除字符串中的所有出现,则可以使用erase/remove成语:
#include <algorithm>
s.erase(std::remove(s.begin(), s.end(), '\t'), s.end());
如果您只想删除字符串开头和结尾处的标签,可以使用boost string algorithms:
#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
如果使用Boost太多开销,您可以使用find_first_not_of
和find_last_not_of
字符串方法滚动自己的修剪函数。
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);
答案 1 :(得分:19)
hackingwords' answer让你半途而废。但是来自<algorithm>
的{{3}}实际上并没有使字符串更短 - 它只返回一个迭代器,说“新序列将在这里结束”。您需要致电std::remove()
来执行此操作:
#include <string>
#include <algorithm> // For std::remove()
my_str.erase(std::remove(my_str.begin(), my_str.end(), '\t'), my_str.end());
答案 2 :(得分:6)
remove
算法将所有不删除的字符移到开头,覆盖已删除的字符,但不会修改容器的长度(因为它适用于迭代器而不知道底层容器)。要实现此目的,请致电erase
:
str.erase(remove(str.begin(), str.end(), '\t'), str.end());
答案 3 :(得分:3)
由于其他人已经用std :: string回答了如何做到这一点,这里有你可以用于CString的内容:
myString.TrimRight( '\t' ); // trims tabs from end of string
myString.Trim( '\t' ); // trims tabs from beginning and end of string
如果您想要删除所有标签,即使是字符串中的标签,请使用
myString.Replace( _T("\t"), _T("") );
答案 4 :(得分:2)
扫描字符串并删除所有发现的事件。
答案 5 :(得分:2)
HackingWords几乎就在那里:将erase与remove结合使用。
std::string my_string = "this\tis\ta\ttabbed\tstring";
my_string.erase( std::remove( my_string.begin(), my_string.end(), '\t'), my_string.end());
答案 6 :(得分:1)
CString替换?
替换('\ t','')
答案 7 :(得分:0)
答案 8 :(得分:0)
我想知道为什么没有人用这种方式修剪字符串:
void trim (string& s) {
string t = "";
int i = 0;
while(s[i] == ' ') i++;
while(s[i] == '\t') i++;
for(i; i < s.length(); i++)
t += s[i];
s = t;
}