Езда на велосипеде через переменные - PullRequest
0 голосов
/ 20 февраля 2019

Этот код работает до сих пор, но сейчас он хранит последнюю переменную только при циклическом переходе в многомерном массиве.

#include <iostream>
#include <functional>
using namespace std;

int main() 
{
    const int columns = 5, rows = 5;
    int menuSelection;
    string word1 = "sloan", word2 = "horse", word3 = "eqrit", word4 = "house", word5 = "water";
    string table[rows][columns];

    for (auto &var : { ref(word1), ref(word2), ref(word3), ref(word4), ref(word5) })
    {
        for (int i = 0; i < rows; ++i) 
        {
            for (int j = 0; j < columns; ++j) 
            {
                string test = var;
                table[i][j] = test[i];
            }
        }
    }

    for (int i = 0; i < columns; ++i)
    {
        for (int j = 0; j < rows; ++j)
        {
            std::cout << table[i][j] << ' ';
        }
        std::cout << std::endl;
    }
}

Вывод:

w w w w w 
a a a a a 
t t t t t 
e e e e e 
r r r r r 

Я бы хотел, чтобы отображались разные слова в каждой строке вывода массива:

s l o a n
h o r s e 
e g r i t    
h o u s e    
w a t e r

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Вы перебираете каждое слово, заполняя весь массив отдельными символами из первого слова, затем перезаписывая весь массив символами из второго слова, затем третьего слова и т. Д.

да, в конце концов, массив заканчивается заполнением только символами последнего слова.

Вам необходимо переосмыслить свои циклы.Вам не нужно 3 вложенных цикла, когда 2 будет достаточно.

Попробуйте что-то еще подобное:

#include <iostream>
#include <string>
using namespace std;

int main() {
    const int columns = 5, rows = 5;

    string words[] = {
        "sloan",
        "horse",
        "eqrit",
        "house",
        "water"
    };

    string table[rows][columns];
    for (int i = 0; i < rows; ++i) {
        string &test = words[i];
        for (int j = 0; j < columns; ++j) {
            table[i][j] = test[j];
        }
    }

    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < columns; ++j) {
            std::cout << table[i][j] << ' ';
        }
        std::cout << std::endl;
    }

    return 0;
}

Вывод

s l o a n 
h o r s e 
e q r i t 
h o u s e 
w a t e r 

Live Demo

0 голосов
/ 20 февраля 2019

Если вы заботитесь только о желаемом выводе, все, что вы делаете, это много ненужного кода.Конечно, чтобы чему-то научиться, вы могли бы пойти разными путями, чтобы достичь результата.

Однако, если вы заботитесь о простом решении, вам нужно просто набрать std::array из std::string s и повторить их для печати.

#include <iostream>
#include <array>
#include <string>

int main() 
{
    const std::array<std::string, 5> words { "sloan", "horse", "eqrit", "house", "water" };

    for (const auto& word: words)
    {
        for (const char charactor: word)  std::cout << charactor << " ";
        std::cout << '\n';
    }
    return 0;
}
0 голосов
/ 20 февраля 2019

ваш код будет зацикливать список строк и устанавливать каждый символ в каждом пробеле следующим образом:

loop 1

s s s s s
l l l l l
o o o o o
a a a a a
n n n n n

loop 2

h h h h h
o o o o o
r r r r r
s s s s s
e e e e e

loop3 ...

И так далее

попробуйте этот код вместо

const int columns = 5, rows = 5;

string list[] = {"sloan", "hores", "eqrit", "house", "water"};
string table[rows][columns];

for(int i = 0; i < rows; ++i)
{
    string currentString = list[i];

    for(int j = 0; j < columns; ++j)
    {

        table[i][j] = currentString[j];
    }
}

for(int i = 0; i < columns; ++i)
{
    for(int j = 0; j < rows; ++j)
    {
        std::cout << table[i][j] << ' ';
    }
    std::cout << std::endl;
}
...