2013-12-09 35 views
-1

我有一个字符串大小N.我需要将此字符串的每个第n个符号更改为'a'而不循环通过所有符号?任何想法如何去做,因为我有点傻眼。提前致谢。更改字符串中的每个第n个符号而不循环遍历所有符号

+3

为了你的目标而言,确实递归计数为 “循环”?如果没有,然后递归! –

+2

??为什么不使用循环?你有钉子开车,所以你放下锤子,去寻找另一种工具? –

+0

即使您使用标准函数,也不希望它会在不进行内部循环的情况下处理任务。毕竟你想重复执行一个循环的定义。 –

回答

1

您可以使用replace_if

std::string s = "hi there"; 
int n = 2; 

int counter = 0; 
std::replace_if(s.begin(), s.end(), [&] (char c) { 
    counter++; 
    return ((counter - 1) % n == 0); 
}, 'a'); 
std::cout << s; 

Alternatively

std::replace_if(s.begin(), s.end(), [&] (char& c) { 
     return ((&c - &s[0]) % n == 0); 
}, 'a'); 
+0

不确定这是最简单的解决方案,但是,对于lambda函数+1。 – Michael

+0

@Michael我知道这有点刺激,但在这些情况下,我总是试图想到与标准库最接近的配合,'replace_if'似乎就是它。当然,问题是它不提供索引,所以这就是计数器变量存在的原因。 – 2013-12-09 14:10:37

+0

'[&](char&c){return((&c - &s [0])%n == 0); ''? – Michael

相关问题