c++ string subscript out of range
Bitte um Hilfe bei der Fehlerbehebung. Es gibt mir eine Fehlermeldung "string index out of range error".
Muss das Programm zum Sortieren von text unter Verwendung der insertion-sort-Algorithmus.
Hier ist der code:
#include<iostream>
#include<string>
using namespace std;
void insertionSort(string &text, int size) {
char temp;
int i;
for(int j=1;j<size;j++)
{
//text.push_back(temp);
temp=text[j];
i=j-1;
while(i>=0 && text[i]>temp)
{
text[i+1]=text[i];
i--;
}
text[i+1]=temp;
}
}
int main()
{
string text="this a just text need to be sorted";
int size = text.length();
insertionSort(text,size);
cout<<text<<endl;
return 0;
}
debug assertion Failed!
Linie:1441:
Ausdruck: string subscript out of range
Ich soll geändert text[i+1]=text[j]
zu text[i+1]=text[i]
;
- ist dieses Hausaufgaben?
- Dein code ist schlecht formatiert, und Sie nicht angeben, welcher Teil des Codes das problem verursacht.
- Sie könnte unser Leben viel einfacher, wenn Sie darauf hingewiesen, wo der Fehler aufgetreten ist und sich die Mühe gemacht, zu formatieren, dies besser.
- Wo bekommen Sie diese Fehlermeldung? Wie auch immer ... die Fehlermeldung sagt alles, du bist außerhalb der Zeichenfolge.
- nur die überarbeitung der Materialien, die Vorbereitung auf Prüfungen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersetzen
mit
Grund:
Wenn i negativ wird, dh
i == -1
sind, dann prüfen Sie, obi>=0
anstatt das zu tun, überprüfen Sie fürtext[i]>temp
(die versucht, Zugriff auf array-element an position -1 und gibt die out-of-range).EDIT:
ersetzen auch
mit
Warum ist das so ? : In insertion sort wenn wir größere Einträge als text[j] im unteren Teil (dh. 0 bis j-1), dann müssen wir schieben diese Einträge vor und stoppen Sie am Punkt, wenn wir nicht mehr Elemente größer als text[j].
Ändern Sie diese Anweisung:
Wenn
j == 1
deine while-Schleife beginnt mit i==0, dann Dekrementiereni
in der Schleife, dann bei der nächsten Ausführung der Schleife prüfen Sie fürtext[i]
ungültig (i == -1
hier)Zu beheben, müssen Sie prüfen, die Gültigkeit von
i
erste:Dieser macht das richtige, weil die
&&
Betreiber hat einen Kurzschluss-Regel: wenn der erste operand (i>=0
in diesem Fall) Ergebnisse infalse
, der rest des Ausdrucks (text[i] > temp
) wird nicht ausgewertet,Haben Sie die Informationen über das problem.Der einfache Weg, um dieses Problem zu lösen ist, um ein paar print-Anweisungen, um zu wissen, die index-Werte mit dem string-array.
Einem anderen Kommentar ist, dass, bitte nicht übergeben Sie die Länge der saite, da, wenn Sie anrufen, text.length(); innerhalb der Funktion vor ändern Sie können die Länge der Zeichenfolge.