2017-05-11 3 views
1

Ich bin in den Anfängen des Lernens von C++ und ich frage mich, ob es eine Möglichkeit gibt zu behaupten, dass eine Teilzeichenfolge aus einem String mit einem Bereich erstellt werden kann. Meine Zeichenfolge variiert in jeder Iteration. Ich versuche, sechs Teilstrings aus diesem ursprünglichen String zu erstellen. Mit dieser Größenvariation versuche ich manchmal auf Indizes der Zeichenfolge zuzugreifen, die für diese bestimmte Iteration nicht existieren.Initial Überprüfen Sie, ob ein Substring innerhalb des Bereichs

Zum Beispiel, wenn mein String in Iteration 1 11 Zeichen Meine erste Teilkette aus 3 Zeichen ist - gültig Meine zweite Teilkette ist die nächsten drei Zeichen - gültig Meine dritte Teilkette die nächsten 5 Zeichen sind - gültig My vierte Teilkette ist die nächsten 4 Zeichen - nicht gültig - Abstürze Programm Meine fünfte Teilkette - nicht gültig, außer Reichweite Meine sechste Teilkette - nicht gültig, außer Reichweite

ich frage mich, ob es ein kleiner Scheck ist, kann ich tun, um die Länge geltend zu machen, ist gültig. Ich nehme an, dass ich für diese Teilstrings keine Standardwerte festgelegt habe. Sie werden erklärt, wie:

String subS1 String subS2 String subS3 ... ... String subS6

würde alle sechs Teile Einstellung dieses Problem auf null bei der Deklaration lindern und für jede gültige Teilzeichenfolge, der Wert wird nur überschrieben?

Vielen Dank im Voraus

subS1 = str.substr(0, 3); // Could be valid range 
subS2 = str.substr(3, 3); // Could be valid range 
subS3 = str.substr(6, 5); // Could be valid range 
subS4 = str.substr(11, 4); // Could be valid range 
subS5 = str.substr(15, 4); // Could be valid range 
subS6 = str.substr(19); // from the nineteenth character to the end 
+3

Klingt wie Sie haben Beispielcode.Siehe [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (https://stackoverflow.com/help/mcve). – InternetAussie

+1

Ich habe ein paar Zeilen hinzugefügt, wie ich die Teilstrings mache. – esmith08734

+1

check string size vor Aufruf 'strstr (index, size)' wie 'subs1 = str.size()> 0? strstr (0, 3): ""; " –

Antwort

0

Entweder die Größe str überprüfen, bevor die Zeichenfolge zu extrahieren, oder verlassen sich auf std::string::substr ‚s len Parameter:

Anzahl der Zeichen in der Teilkette schließen (falls Die Zeichenfolge ist kürzer, so viele Zeichen wie möglich verwendet werden). Ein Wert von string :: npos gibt alle Zeichen bis zum Ende der Zeichenfolge an.

Beispiel:

#include <iostream> 
#include <string> 

int main() 
{ 
    std::string str="Alexander the Great"; 

    std::string str2 = str.substr (16, 25); 

    std::cout << str2 << '\n'; // eat 

    return 0; 
} 

Es wird nicht abstürzen, es wird nur so viele Zeichen wie möglich nutzen.

Dies ist jedoch:

std::string str2 = str.substr (20, 25); 

abstürzen sollte, tun so es so in diesem Fall:

std::string str2 = ""; // initialise to empty string, that is the NULL you are saying I guess 
if(str.size() > 20) 
    str2 = str.substr (20, 25); 
// 'str2' will be an empty string 
2

Algorithmus --->

Schritt 1: Get die Länge der Zeichenfolge in der aktuellen Iteration in der Variablen Größe.

schritt 2: Schreiben Sie diesen Code in itertaion.

  int i=0; 
     i= str.substr(start,end).length(); 
     if(i>size) then, 
     std::cout<<"index exceeded"; 
Verwandte Themen