C++ C++;删除字符串中的额外空格或制表符
我需要从行中删除额外的空格C,如C++ C++;删除字符串中的额外空格或制表符,c++,boost,C++,Boost,我需要从行中删除额外的空格C,如1.47\t\t4.32 5.1\t\tf41.4。 如何使用boost实现这一点?我找到了问题的答案 std::string trim(const std::string& str, const std::string& whitespace = " \t") { const auto strBegin = str.find_first_not_of(whitespace); if (strBeg
1.47\t\t4.32 5.1\t\tf41.4
。
如何使用boost实现这一点?我找到了问题的答案
std::string trim(const std::string& str,
const std::string& whitespace = " \t")
{
const auto strBegin = str.find_first_not_of(whitespace);
if (strBegin == std::string::npos)
return ""; // no content
const auto strEnd = str.find_last_not_of(whitespace);
const auto strRange = strEnd - strBegin + 1;
return str.substr(strBegin, strRange);
}
std::string reduce(std::string& str,
const std::string& fill = " ",
const std::string& whitespace = " \t")
{
// trim first
auto result = trim(str, whitespace);
// replace sub ranges
auto beginSpace = result.find_first_of(whitespace);
while (beginSpace != std::string::npos)
{
const auto endSpace = result.find_first_not_of(whitespace, beginSpace);
const auto range = endSpace - beginSpace;
result.replace(beginSpace, range, fill);
const auto newStart = beginSpace + fill.length();
beginSpace = result.find_first_of(whitespace, newStart);
}
return result;
}
如果你只是想简单地做,我会用这样的方法:
std::string single_space(std::string const &input) {
std::istringstream buffer(input);
std::ostringstream result;
std::copy(std::istream_iterator<std::string>(buffer),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(result, " "));
return result.str();
}
std::string单_空间(std::string const&input){
std::istringstream缓冲区(输入);
std::ostringstream结果;
std::copy(std::istream_迭代器(缓冲区),
std::istream_迭代器(),
std::ostream_迭代器(结果“”);
返回result.str();
}
如果您想让它尽可能快,您可能想看看另一个。这是一个非常简单的删除额外空白的实现
#include <iostream>
std::string trimExtraWhiteSpaces(std::string &str);
int main(){
std::string str = " Apple is a fruit . ";
str = trimExtraWhiteSpaces(str);
std::cout<<str;
}
std::string trimExtraWhiteSpaces(std::string &str){
std::string s;
bool first = true;
bool space = false;
std::string::iterator iter;
for(iter = str.begin(); iter != str.end(); ++iter){
if(*iter == ' '){
if(first == false){
space = true;
}
}else{
if(*iter != ',' && *iter != '.'){
if(space){
s.push_back(' ');
}
}
s.push_back(*iter);
space = false;
first = false;
}
}
return s;
}
#包括
std::string trimpextrawhitespaces(std::string&str);
int main(){
std::string str=“苹果是一种水果。”;
str=外部空白(str);
std::您说的额外空格是什么意思?是否要将其更改为“1.474.325.1f41.4”?不需要boost。std::remove_if
和isspace
如果不需要空格,就应该这样做。另一方面,如果你只想删除足够多的空格,使其他字符之间只有一个空格,看起来会有帮助。Osiris,对不起,但是当我发布问题时字符串会删除额外的空格:D.不,我有数字,然后是两个空格然后是数字。我需要字符串1,空格和数字。