При написании небольшого фрагмента кода обработки текста я понял, что с использованием обозначений, которые я использовал, можно было бы просто выполнять всю мою обработку при импорте, что сократит весь цикл в пределах l oop. Однако это означало бы, что мой код будет много обрабатывать, пока файл открыт, используя данные из указанного файла, и мой инстинкт подсказывает, что правильным программистам может быть что сказать по этому поводу (хотя с такой же легкостью вы можете не так как я еще только студент).
По сути, я хочу превратить это (обратите внимание, что код незакончен) ...
int minPalindromeSteps(std::string input) {
//Step 1: Import a list of palindromes from a file
//Note: the file is assumed to be encoded in standard ASCII and all lowercase, this code is not generalized for unicode
set<string> Palindromes {};
{//Open a new scope so that temp variables end sooner
string word {};
std::ifstream word_file;
word_file.open("palindromes.txt");
if (!word_file.is_open())throw std::runtime_error("Error: File opening failed.");
while (word_file >> word){//Recall: >> operator delineates using whitespace
if ( input == word ) return 0;//if the word is already a palindrome
else Palindromes.insert(word);
}
word_file.close();
}//End dummy scope
//Step 2: Determine which words (if any) are the "potential palindrome"
set<string> shortlist {};
for (auto& word: Palindromes){//note: everthing inside this loop could be moved to the while above, but my gut tells
//me not to do operations directly to an open file
bool shortlisted = true;//reset the shorlist flag to true
for (unisgned i {0}; i < input.length(); i++){
if ( input.at(i) != word.at(i) ){
shortlisted = false;
break;
}//end if
}//end for 2
if (shortlisted) shortlist.insert(word);
}// end for 1
}
в это:
int minPalindromeSteps(std::string input) {
//Step 1: Import a list of palindromes from a file
//Note: the file is assumed to be encoded in standard ASCII and all lowercase, this code is not generalized for unicode
set<string> shortlist {};//THIS WAS RENAMED
{//Open a new scope so that temp variables end sooner
string word {};
std::ifstream word_file;
word_file.open("palindromes.txt");
if (!word_file.is_open())throw std::runtime_error("Error: File opening failed.");
while (word_file >> word){//Recall: >> operator delineates using whitespace
if ( input == word ) return 0;//if the word is already a palindrome
else {//EVERYTHING WAS MOVED INTO THIS ELSE
bool shortlisted = true;//reset the shorlist flag to true
for (unisgned i {0}; i < input.length(); i++){
if ( input.at(i) != word.at(i) ){
shortlisted = false;
break;
}//end if
}//end for
if (shortlisted) shortlist.insert(word);
}
}
word_file.close();
}//End dummy scope
//Step 2: Determine which words (if any) are the "potential palindrome"
for (auto& word: Palindromes){
/* EVERYTHING WAS MOVED ABOVE */
}// end for 1
}
... и мне интересно, есть ли какой-то принцип кодирования, невысказанное правило или тому подобное, чтобы не работать с открытыми файлами слишком долго, или это просто зависит от личных предпочтений и читабельности кода.