У меня есть строковый массив, который я передаю из функции в свой 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
эффективно и не удалось найти ответ где-либо.
Вы не можете на самом деле. Что вы можете сделать, это предотвратить изменения в последующих операциях, передав 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
уже отслеживает это.
Других решений пока нет …