Как превратить обычный массив строк в массив константных строк после того, как он был прочитан из файла в C ++?

У меня есть строковый массив, который я передаю из функции в свой main, и я хотел бы преобразовать этот массив в константу, как только он окажется в main, чтобы другие функции не могли им манипулировать. Я не уверен, как это сделать. Я студент и не могу использовать указатели для этого задания. Вот что у меня есть:

//declare variables
string name;
const int size = 11;
string ans[size];
const string corrAns[size] = { "C++","for","if","variable","function", "return",
"array","void","reference","main", "prototype" };
const string studAns[size];
double percent;

// read file
readFile(name, ans, size);

// calculate percentage
percent = calculatePercentage(corrAns, studAns, size);

// print out report
printReport(name, percent, corrAns, studAns, size);

system("Pause");
return 0;
}

Остальная часть программы работает так, как я хочу, но я не уверен, как я должен переводить ans в studAns эффективно и не удалось найти ответ где-либо.

0

Решение

Вы не можете на самом деле. Что вы можете сделать, это предотвратить изменения в последующих операциях, передав const std::string* указатель или const std::string[] массив для функций.


Тем не менее, идиоматический способ C ++ будет вовсе не использовать необработанные массивы, а std::vector<std::string> вместо:

std::vector<std::string> ans(size);
const std::vector<std::string> corrAns = {
"C++","for","if","variable",
"function", "return",
"array","void","reference","main", "prototype" };
std::vector<std::string> studAns(size);

Чтобы функции не могли изменять значения, вы должны иметь такие подписи, как

double calculatePercentage(
const std::vector<std::string>& corrAns
, const std::vector<std::string>&  studAns);

void printReport(
const std::string& name, double percent
, const std::vector<string>& corrAns
, const std::vector<string>& studAns);

Обратите внимание, что size не нужно, std::vector уже отслеживает это.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]