我想弄清楚如何從一個字符串中一次刪除一個字符,這樣我就可以獲取所有版本的字符串,但一次只能丟失一個字符。這是我想要做的工作,但無濟於事。如何從一個字符串中一次刪除一個字符?
for(int i = 0 ; i < s.length() ; i++){
tmp.erase(0, i);
std::cout << tmp << std::endl;
s.at(i)++;
}
它顯然適用於第一個,但是然後刪除其餘的。 JON應該有JN JO
我想弄清楚如何從一個字符串中一次刪除一個字符,這樣我就可以獲取所有版本的字符串,但一次只能丟失一個字符。這是我想要做的工作,但無濟於事。如何從一個字符串中一次刪除一個字符?
for(int i = 0 ; i < s.length() ; i++){
tmp.erase(0, i);
std::cout << tmp << std::endl;
s.at(i)++;
}
它顯然適用於第一個,但是然後刪除其餘的。 JON應該有JN JO
最簡單的方法就是讓每一次的字符串的拷貝,並修改副本的預期輸出:
for(std::string::size_type i = 0 ; i < s.size() ; i++){
auto tmp=copy;
tmp.erase(i, 1);
std::cout << tmp << std::endl;
}
爲了確保正確無誤,該指數變量應該是一個std::string::size_type
,length()
和size()
都返回(size_t
和size()
自然屬於一起)。
你的代碼幾乎沒有錯,只是它忽略了每次都創建字符串的副本,並且s.at(i)++
不屬於那裏。
對於*正確性*的字符串,該指數應該是'的std :: string :: size_type',這可能是可能不是'size_t'。另外,'tmp.erase(i)'將擦除指定索引中的所有字符,直到字符串結尾。要擦除一個字符,您需要使用'tmp.erase(i,1)'或'tmp.erase(tmp.begin()+ i)'代替。 –
謝謝。糾正。 –
@SamVarshavchik啊,這很有道理!謝謝。哈哈smh在s.at(i)++ ... – Gman
您不會將tmp
重置爲每個循環迭代中的原始字符串值,因此它會持續從tmp
刪除越來越多的字符,直到它爲空。
您還在每次循環迭代中刪除錯誤的字符範圍。
您還在修改每個循環迭代中的原始字符串以遞增其單個字符的值。你爲什麼這麼做?
嘗試一些更喜歡這個:
for(std::string::size_type i = 0 ; i < s.length() ; i++){
std::string tmp = s;
tmp.erase(i, 1);
std::cout << tmp << std::endl;
}
@FirstStep它需要處理任何規模大小 – Gman