我需要删除单词之间除一个空格外的所有空格。我遍历字符串,if (temp.back() == ' ' && c != ' ')
在进入下一个单词之前先检查最后一个空格。但这会删除所有空白。任何提示问题出在哪里?
string removeWhiteSpace(string current)
{
string myNewString = "";
string temp = "";
for (char c : current)
{
temp.push_back(c);
if (temp.back() == ' ' && c != ' ')
{
myNewString.push_back(' ');
}
if (c != ' ')
{
myNewString.push_back(c);
}
}
return myNewString;
}
答案 0 :(得分:2)
问题出在有条件的
if (temp.back() == ' ' && c != ' ')
如果最后一个字符不是空格并且c
是空格,则要添加空格:
if (temp.back() != ' ' && c == ' ')
(您颠倒了==
和!=
运算符)。
此外,您还需要在此条件块之后按下新字符c
(否则temp.back()
和c
将始终是同一字符)。
最后,字符串temp
开头是空的,不允许调用back()
,您应该使用非空的值来初始化它(例如temp = "x"
)。
因此,最终起作用的功能是:
string removeWhiteSpace(string current)
{
string myNewString = "";
string temp = "x";
for (char c : current)
{
if (temp.back() != ' ' && c == ' ')
{
myNewString.push_back(' ');
}
temp.push_back(c);
if (c != ' ')
{
myNewString.push_back(c);
}
}
return myNewString;
}
答案 1 :(得分:0)
您可能希望删除多余的空格。这段代码会有所帮助。
string removeWhiteSpace(string current)
{
string myNewString = "";
string temp = "";
int l=current.length();
myNewString+=current[0];
for(int i=1;i<l;i++){
if(myNewString[myNewString.length()-1]==' ' && current[i]==' ')
continue;
else
myNewString+=current[i];
}
return myNewString;
}
答案 2 :(得分:0)
更多C ++ ish解决方案:
#include <algorithm>
#include <cctype>
#include <string>
#include <utility>
#include <iostream>
std::string remove_excessive_ws(std::string str)
{
bool seen_space = false;
auto end{ std::remove_if(str.begin(), str.end(),
[&seen_space](unsigned ch) {
bool is_space = std::isspace(ch);
std::swap(seen_space, is_space);
return seen_space && is_space;
}
)
};
if (end != str.begin() && std::isspace(static_cast<unsigned>(end[-1])))
--end;
str.erase(end, str.end());
return str;
}
int main()
{
char const *foo{ "Hello World! " };
std::cout << '\"' << remove_excessive_ws(foo) << "\"\n";
}
"Hello World!"