2013-01-22 21 views
2

我有一些程序問題,也許有人可以幫助我。所以:使用for_each,複製字符串

int main() { 
    std::string col = "maly tekst" 
    for_each(/* FILL IN #2*/ f()); 
    copy(/*FILL IN #3*/); 
    std::cout << col; } 

輸出應該是:TSKET YLAM
我知道,我需要使用仿函數所以我做了這樣的事情:

#include <iostream> 
#include <string> 
#include <algorithm> 
class f{ 
public: 
void operator() (char &k)const 
{ 
    k = toupper(k); 
} 
}; 
int main(){ 
std::string col = "maly tekst"; 
for_each(col.begin(),col.end(),f()); 
copy(col.rbegin(),col.rend(),back_inserter(col)); 
std::cout << col << std::endl; 
} 

但現在當我運行它,它返回:

MALY TEKSTTSKET YLAM 

有人能指出我的正確方式,還是幫助我使用此示例程序?

感謝

E:忘了補充一點,我只能用在主這個功能,我不能添加任何新

+2

您正插入到相同字符串的後面。 – juanchopanza

+0

如果你的仿函數如圖所示,你需要公開操作符。如果沒有顯示,我建議你改變這種習慣。 – chris

+0

Sory我忘了添加公衆:它現在是公開 – Silwest

回答

0

不能使用std ::副本,如果更換原來的容器你不能使用std::reverse。要與reverse order打印,另一個解決方法是將col直接複製到stream iterator

for_each(col.begin(),col.end(),f()); 
std::copy(col.rbegin(), col.rend(), std::ostream_iterator<char>(std::cout, "")); 
+0

我認爲這是很好的答案。 輸出應TSKET YLAM ,所以我們不能使用副本來寫,我們必須使用副本來更改字符串,但我不知道如何... – Silwest

2
std::for_each(col.begin(),col.end(),f()); // as before 
std::reverse(col.begin(), col.end()); 
+0

Sory隊友,但我只能在主要使用這個功能。 – Silwest

+0

@Silwest是否需要反轉到位,還是可以複製到另一個字符串中? – juanchopanza

+0

這是一個很好的問題,但我認爲我需要尊重它,因爲我不能在main中添加任何新東西只在FILL IN的位置。 – Silwest