我正在設計一個遊戲WordBrain的作弊。基本上這只是一個小程序,需要一些字母,將序列置換,然後將序列分成具有長度屬性的「單詞」,然後搜索我的文本文件以提交有意義的排列以便打印出來。(C++)不能使用string :: substr將子字符串分配給對象
while (next_permutation(letters.begin(), letters.end())) //loop through possible permutations of the combination
{
int position_marker = 0; //serve specific purpose
for (auto x : substring_collection) //trouble is in this loop
{
string temp;
int k = x.take_length();
try { temp = letters.substr(position_marker, k); }
catch (out_of_range) { cout << "OUT OF RANGE"; }
x.set(temp); //member content does not register change
position_marker += x.take_length(); //also member word_length is 0 now, despite their are no invocation of methods capable of changing it
}
if (all_of(substring_collection.begin(), substring_collection.end(), [&](substring & s) {return !(library.find(s.take_content()) == library.end()); }))
{
for (auto x : substring_collection)
{
cout << x.take_content() + " ";
}
}
}
這是麻煩來自的位置。基本上,substring_collection是vector<substring>
,其中包含的類的對象substring
這裏是一流的樣子:
class substring
{
private:
std::string content;
int word_length;
public:
substring() : content(""), word_length(0) {};
substring(std::string & s, int c) : content(s), word_length(c) {};
void set(std::string & s)
{
content = s;
}
void clear()
{
content.clear();
}
void set_length(int c)
{
word_length = c;
}
void showinfo() const
{
std::cout << "Content is " + content << " Length is : " << word_length;
}
int take_length() const
{
return word_length;
}
std::string take_content() const
{
return content;
}
};
我懷疑代碼出錯的原因是position_marker
,其價值取決於該成員word_length「的對象substring
設置爲0. 在此循環之前的代碼中,我只是該成員從用戶輸入(從std::cin
)獲取數據的設置方法。 你能告訴我,是否有任何隱藏的機制重置財產,或創建我不知道的品牌新對象? 此外,編碼風格的教學非常受歡迎。我剛開始學習編碼,因此非常感謝任何提示。
您應該包括爲什麼您認爲它在提到的行上失敗,以及它如何不按預期工作/運行的描述。 –
謝謝你的提示。我將確保包括如果在未來出現其他問題時,錯誤如何出現。目前,我已經制定出解決方案。 – StormBlade