2013-05-13 82 views
-5

我正在嘗試編寫一個基本上採用字符串矢量(來自用戶輸入)的小程序,並顯示或打印出增加的分辨率(大小)減小的分辨率(大小)。字符串的分辨率/大小

這將增加或4. 實施例減少每個字符串的每一個字符:如果字符串是「ABCDEF」,那麼增加的分辨率將是「aaaabbbbccccddddeeeeffff」

我有麻煩編寫代碼。我不希望它不僅遍歷字符串向量,而且還希望它讀取向量中每個字符串的字符並生成分辨率結果。

有沒有辦法做到這一點?我一直從編譯器得到這些轉換錯誤

void asci_art::bigresol(vector<string>art) 
{ 
    cout << "Increased Resolution of your artwork" <<endl; 

    for (int i = 0; i < art.size(); i++) 
    { 
     for(int j = 0; j < art[i].size(); j++) 
     { 
      cout << art[j] + art[j] + art[j] + art[j] << endl; 
     } 
    } 
    } 

btw我在類中寫了這個函數。

在這種情況下,我在寫一個提高分辨率的函數。我認爲降低分辨率將是相同的想法。

+2

如果你通過了矢量藝術的值(在本例中),它會調用爲載體的拷貝構造函數和創建一個副本的矢量,這是相當浪費。相反,通過指針(矢量 *部分)或const引用(const矢量&rart)傳遞它。 – edtheprogrammerguy 2013-05-13 20:58:39

+0

爲什麼標題說「C」? – 2013-05-13 20:58:43

+0

@PaulR我的意思是C++所以忽略 – user2188311 2013-05-13 21:00:11

回答

2

您將連接字符串而不是連接字符。形成從每一個字符,而不是每個字符串需要字符串:

std::cout << std::string(4, art[i][j]); //put the newline in the outer loop 

你也應該考慮讓你的參數是一個const std::vector<std::string> &以免造成不必要的副本調用函數時。也考慮使用C++ 11中引入的nice-for語法:

for (const auto &str : art) { 
    for (auto c : str) { 
     std::cout << std::string(4, c); 
    } 

    std::cout << '\n'; //put a newline in between each transformed string 
} 
+0

我沒有C++ 11 。我想我有一個更老的編譯器 – user2188311 2013-05-13 21:12:46

+0

你認爲?做'gcc -ver' – 2013-05-13 21:13:49

+0

@ user2188311,你不需要它來做到這一點,但它確實使它看起來更好看(在C++ 98/C++ 03中提升很多)。您可以嘗試啓用'-std = C++ 11'或'-std = C++ 0x'選項。另外,你的意思是在每個字符串之後打印換行符而不是每個字符組? – chris 2013-05-13 21:14:31

1

哎呀 - 我誤解了。

我想這是你想要的東西,在你的風格:

void asci_art::bigresol(vector<string> art) 
{ 
    cout << "Increased Resolution of your artwork" << endl; 

    for (int i = 0; i < art.size(); i++) 
    { 
     line = art[i] 
     for(int j = 0; j < line.size(); j++) 
     { 
      for(int k=0; k<4; k++) 
       cout << line[j]; 
     } 
     cout << endl; 
    } 
} 
+0

有趣。那麼爲什麼我應該把j <4?這在迭代中究竟做了什麼?我不太明白 – user2188311 2013-05-13 21:04:37

+0

這會打印每個字符串四次。 – chris 2013-05-13 21:05:19

+0

不,這會打印出'abcdefabcdefabcdefabcdef' – 2013-05-13 21:11:59