Bei dem Versuch zu lösen Simple Text Editor
Herausforderung von HackerRank, besteht meine Lösung nur 3 der 15 Testfälle. Da ich keinen Zugriff auf die Testfälle habe, kann ich nicht herausfinden, was genau mit meinem Code falsch ist.
Mein Ansatz zur Lösung des Problems ist, wie unten -
Brauchen Sie Hilfe herauszufinden, Bug in meiner Lösung für einfache Texteditor Herausforderung
- einen Vektor Verwenden Sie die verschiedenen Zustände des Editors zu halten.
- Wenn wir an die Zeichenfolge
init
anhängen (siehe Code unten), drücken Sie den neuen Status auf der Rückseite des Vektors. [OP_APPEND] - Im Falle eines Löschvorgangs, drücken Sie den neuen Zustand der
init
Zeichenfolge auf der Rückseite des Vektors. [OP_DELETE] - Da der Zustand der
init
Zeichenfolge auf der Rückseite des Vektors gespeichert ist, sollte im Falle mehrerer UNDO-Ereignisse die Zeichenfolgeinit
mit der Rückseite des Vektors synchronisiert werden. [OP_PRINT & OP_UNDO]
Und unten ist meine Implementierung -
#include <iostream>
#include <vector>
#include <string>
#define MAX_LEN 1000000
#define MAX_TIMES 100000
using namespace std;
/* Operations supported by editor */
enum EDITOR_OPS {
OP_APPEND = 1,
OP_DELETE,
OP_PRINT,
OP_UNDO
};
/*
* @brief Driver function
*/
int main(int argc, char *argv[])
{
unsigned times; /* Total number of operations */
unsigned option; /* EDITOR_OPS operations */
string init = ""; /* Initial string */
string mystr; /* Temp string */
unsigned num; /* Number used in OP_DELETE & OP_PRINT comms */
vector<string> myvect; /* To hold various states of the editor */
unsigned curr_len = 0; /* Sum of lengths of all characters entered */
cin >> times;
if (times >= 1 && times <= MAX_TIMES) {
for (auto i = 0; i < times; i++) {
cin >> option;
if (option >= 1 && option <= 4) {
if (option == OP_APPEND) {
cin >> mystr;
curr_len += mystr.length();
if (curr_len <= MAX_LEN) {
init.append(mystr);
myvect.push_back(init);
}
}
else if (option == OP_DELETE) {
cin >> num;
if (num >=1 && num <= init.length()) {
init.erase(init.length() - num);
myvect.push_back(init);
}
}
else if (option == OP_PRINT) {
cin >> num;
if (!myvect.empty())
init = myvect.back();
if (num >= 1 && num <= init.length())
cout << init.at(num - 1) << "\n";
}
else if (option == OP_UNDO) {
if (!myvect.empty())
myvect.pop_back();
}
else {
cout << "We should NOT get in here\n";
}
}
}
}
return 0;
}
Könnte jemand bitte helfen Sie mir den Fehler herauszufinden (s) in meinem Code und/oder den Eckfällen ich fehle?
'3. print (k) - drucke das * kth * Zeichen von S' – kfsone
Du solltest 'if (option> = 1 && option <= 4)' entfernen, damit du sehen kannst "Wir sollten NICHT hier reinkommen" wenn etwas nicht stimmt. –
"Da ich keinen Zugriff auf die Testfälle habe, kann ich nicht herausfinden, was genau mit meinem Code nicht stimmt." Wenn Ihr Code nicht funktioniert, ist das Schreiben eigener Testfälle ein hervorragender Ort, um mit dem Debuggen zu beginnen - und so ist es auch bei der Programmierung in der realen Welt. Der Code ist nicht der einzige Weg, um zu debuggen ... –