Как получить доступ к строке матрицы C ++? - PullRequest
0 голосов
/ 05 февраля 2019

Я переучиваю C ++ после многих лет matlab.Вот некоторый код, который я написал

char  couts[3][20]={"Area of Rectangle: ","Area of Triangle: ","Area of Ellipse: "};
char C[20];
for (int i = 0; i < 3; i++) {
  C=couts[i];
  cout << C;
  //code that calculates and couts the area
}

, ясно, что это неправильный способ печати этого ряда раскладов, но после попытки многих вариантов и поиска в Google, я не могу понять, что я делаю неправильно,(

Ответы [ 3 ]

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

Вы, вероятно, должны использовать функции C ++, а не старые идиомы C:

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

const std::array<std::string, 3> couts{ "Area of Rectangle: ","Area of Triangle: ","Area of Ellipse: " };

int main()
{  
  std::string C;
  for (int i = 0; i < couts.size(); i++) {
    C = couts[i];
    std::cout << C << "\n";
    //code that calculates and couts the area
  }
}
0 голосов
/ 05 февраля 2019

Вот версия, использующая C ++ 17 руководства по выводу для std :: array в сочетании с std :: string_view , позволяющая использовать циклы for на основе диапазона и т. Д. Как дляstd::array и std::string_view с.

#include <iostream>
#include <array>

constexpr std::array couts = {
    std::string_view{"Area of Rectangle: "},
    std::string_view{"Area of Triangle: "},
    std::string_view{"Area of Ellipse: "}
};

int main() {
    for(auto& C : couts) {
        for(auto ch : C) {
            std::cout << ch; // output one char at a time
        }
        std::cout << "\n";
    }
}
0 голосов
/ 05 февраля 2019

Используйте string с или даже string_view с в этом случае, а не массивы символов.Вы не копируете строку в C, поэтому cout не работает.В современном C ++ (C ++ 17) это было бы вместо:

constexpr std::string_view couts[] = {"Area of Rectangle: ","Area of Triangle: ","Area of Ellipse: "};
std::string_view C;
for (auto s: couts) {
  std::cout << s << std::endl;
}

Это, пожалуй, единственное место, где я бы написал массив в стиле C и не использовал бы std::array, так как количество элементов можетизменить в будущем.

...