假设我们有一个包含多个换行符的长字符串:
char const* some_text = "part1\n\npart2\npart3";
现在的任务是用空格替换所有'\ n'个字符,如果它只在文本部分之间出现一次,并且如果它出现多次则同时保留所有'\ n'个字符。换句话说:
"123\n456" => "123 456"
"123\n\n456" => "123\n\n456"
"123\n\n456\n789" => "123\n\n456 789"
这样做的最佳方式是什么?
答案 0 :(得分:3)
以下正则表达式检测单次出现的换行符:
([^\n]|^)\n([^\n]|$)
|-------|
no newline before
(either other character or beginning of string)
|--|
newline
|--------|
no newline after
(either other character or end of string)
您可以在std::regex_replace
中使用该正则表达式,以便用空格替换这些单行换行符(并通过添加$1
和$2
来保留换行符之前和之后的匹配字符:
std::string testString("\n123\n\n456\n789");
std::regex e("([^\n]|^)\n([^\n]|$)");
std::cout << std::regex_replace(testString, e, "$1 $2") << std::endl;
答案 1 :(得分:2)
此功能可能适用于您的情况,只需手动检查并将\n
替换为space
。可能有更好的选项,例如regex_replace。
void rep(char ch[])
{
int cnt = 0;
int i;
for(i=0; ch[i]!='\0'; i++)
{
if(ch[i]=='\n')
cnt++;
else if(cnt==1)
{
ch[i-1]=' ';
cnt=0;
}
else
cnt=0;
}
if(cnt==1)
ch[i-1]=' ';
}
答案 2 :(得分:2)
由于它被标记为C ++,我将这样对待它。显然,这可以通过正则表达式来解决,但它同样微不足道(如上所述),而不是需要一个。
rep(0, length(x))