2013-12-09 48 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

相關問題