-6

基本的に(ユーザー入力から)文字列のベクトルを取得し、その解像度(サイズ)の増減を表示または出力するミニプログラムを作成しようとしています。

各文字列の各文字を 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;
        }
     }
   }

ところで、この関数をクラスに書きました。

この場合、解像度を上げる関数を書いています。解像度を下げることも同じ考えだと思います。

4

2 に答える 2

2

文字を連結するのではなく、文字列を連結しています。各文字列ではなく、各文字から必要な文字列を形成します。

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

const std::vector<std::string> &関数を呼び出すときに不要なコピーを避けるために、パラメーターを にすることも検討する必要があります。C++11 で導入された、優れた range-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
}
于 2013-05-13T21:00:11.173 に答える
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;
    }
}
于 2013-05-13T21:01:06.483 に答える