2017-07-16 28 views
0

我有一个字符串数组,我从一个函数传递到我的main,并且我想将该数组更改为一个常量,一旦它在main中,以便其他函数不能操作它。我不知道如何做到这一点。我是一名学生,不能使用指针进行这项任务。以下是我有:如何在从C++文件读取常量字符串数组后,将其转换为常量字符串数组?

//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 *'作为函数参数的类型。 – user0042

+0

为什么你认为你需要在任何地方传输'ans'而不是直接使用它? –

+0

我已经花了很多年作为一名专业程序员,并且我从来没有写过代码来构建'main'中的const数组。你不可以使用指针......你可以使用引用吗? – Beta

回答

1

如何从C++文件中读取常量字符串数组到一个常量字符串数组中?

你不可能真的。您可以做的是通过将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已经跟踪它。

+0

“你不能真正地”对const数组的引用可以正常工作。 – juanchopanza

+3

@juanchopanza好吧,这并不改变原始数组的常量,这就是我的意思。 – user0042

+0

是的。它只给它传递给它的函数一个const常量视图。我认为这对于OP来说足够好,但他们对于他们的要求还不够清楚。 – juanchopanza

相关问题