2017-07-16 52 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

相關問題