【发布时间】:2016-10-25 06:11:59
【问题描述】:
我有一个程序,它接收一个字符串并对其进行格式化,去掉它的符号并将大小写设置为较低以便可以处理它。
例子:
"Man, this is super trippy!" -> "man this is super trippy"
"YOU are entering a NEW dimension!" -> "you are entering a new dimenstion"
不幸的是,处理某些字符串会导致单词之间出现额外的空格。
例子:
"Wait a minute -- this is too groovy!" -> "wait a minute this is too groovy"
"TONIGHT -- we DINE IN hell!" -> "tonight we dine in hell"
注意到后两个示例中的空格了吗?出于某种原因,在使用此处理字符串后:
line.erase(remove(line.begin(), line.end(), toExclude[i]), line.end());
transform(line.begin(), line.end(), line.begin(), tolower);
其中 line.erase 在遍历字符串以删除 char 的特定实例时被调用,而 transform 将整个内容设置为小写。
由于我的程序可以正常工作,直到我得到单词之间带有连字符的字符串,有没有办法确保单词之间的最大空格保持为 1?
【问题讨论】:
-
根据您提供的代码,您是
using namespace std;,即bad habit to get into -
@QPaysTaxes 我明白了,谢谢,很遗憾,这是教授要求我们这样做的方法,以免收到作业扣分。
-
@QPaysTaxes,这是一个有效的观点,但是如果您在讨论中添加的内容很少,我建议您不要单独说明这一点,因为它无助于答案或讨论导致答案。尽我所能:ameizing,我相信您可以跟踪打印的最后一个字符是什么(空格或否),并避免在某些情况下输出空格。还有一个问题,输入
"A B - ! "会发生什么? -
@user2899162 cmets 的意义不仅仅是为了寻找答案;这是为了以一种(不一定)适合答案的方式帮助提问者,或者这更像是一个提示而不是实际答案。请参阅占位符文本:“使用 cmets 了解更多信息或建议改进”
-
也许您可以将
std::unique与自定义谓词一起使用?
标签: c++ string transform erase