10

谁能建议一种从字符串中删除制表符(“\t”s)的方法?CString 或 std::string。

例如“1E10”变成“1E10”。

4

9 回答 9

20

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

#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_offind_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);
于 2009-02-17T11:06:06.937 回答
20

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());
于 2009-02-17T11:10:16.943 回答
6

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

str.erase(remove(str.begin(), str.end(), '\t'), str.end());
于 2009-02-17T11:05:16.767 回答
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("") );
于 2009-02-17T11:31:43.863 回答
2

扫描字符串并删除所有发现的事件。

于 2009-02-17T10:49:00.770 回答
2

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());
于 2009-02-17T11:11:38.517 回答
1

CString 替换?

替换('\t', '')

于 2009-02-17T10:55:08.023 回答
0

第一个想法是使用remove

remove(myString.begin(), myString.end(), "\t");

尽管如果该比较不起作用,您可能不得不使用 remove_if 。

于 2009-02-17T10:52:21.183 回答
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;
}
于 2015-12-15T06:26:57.717 回答