谁能建议一种从字符串中删除制表符(“\t”s)的方法?CString 或 std::string。
例如“1E10”变成“1E10”。
如果要删除字符串中的所有出现,则可以使用擦除/删除习语:
#include <algorithm>
s.erase(std::remove(s.begin(), s.end(), '\t'), s.end());
如果您只想删除字符串开头和结尾的制表符,您可以使用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
如果使用 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);
hackingwords 的回答让你成功了一半。但std::remove()
from<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());
由于其他人已经回答了如何使用 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("") );
扫描字符串并删除所有发现的事件。
HackingWords 即将到来:将擦除与删除结合使用。
std::string my_string = "this\tis\ta\ttabbed\tstring";
my_string.erase( std::remove( my_string.begin(), my_string.end(), '\t'), my_string.end());
CString 替换?
替换('\t', '')
我想知道为什么没有人以这种方式修剪字符串:
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;
}