Categories Programmierung

A Mid String Function for C and C+: Replikation einer der nützlichsten String-Handling-Funktionen in Visual Basic mit C und C++

Es gibt drei Möglichkeiten, eine schöne Mid-ähnliche Funktion zu erhalten, abhängig von der Sprache und der Portabilität, die der Programmierer gewählt hat. C, C++ und C++ STD.

 

Einführung

Die Behandlung von Zeichenketten ist eines der heißen Themen der C-Programmierung, mit dem jeder anfängt, ein Problem zu haben, und am Ende ein Experte wird. Der Weg dorthin ist oft gefährlich und voller Alpträume bei der Fehlersuche.

Dies ist für Visual Basic-Programmierer, die an die Feinheiten einer Sprache gewöhnt sind, die eine hervorragende String-Unterstützung bietet, schlimmer als für alle anderen. Graben Sie jedoch unter der Oberfläche, und es ist möglich, einen einfach zu verstehenden Weg zu finden, um die VB-String-Handling-Funktionen wie Mid, Left und Right zu emulieren.

Dieser Artikel konzentriert sich auf die Funktion Mid. Bevor Sie jedoch einsteigen, sollten Sie Ihr Gedächtnis auffrischen:

  • Computerprogrammierung 101 – eine Einführung
  • Die C-String-Bibliothek
  • C-Programmierung
  • Schleifen (Wiederholungen) Tutorial

Mit der Grundfunktion Mid kann der Programmierer einen Code wie den folgenden schreiben:

myString = Mid(sourceString, 2, 5)

Wenn wir in sourceString “Hello Mid String” eingegeben haben, würden wir erwarten, dass in myString “llo M” zurückgegeben wird. Schauen wir uns nun einige funktionierende Lösungen an.

 

man in gray dress shirt sitting on chair in front of computer monitor
Photo by lukepeters on Unsplash

Eine C/C++-Mid-Funktion

Zum Glück müssen wir nicht allzu weit gehen, um eine einfache Funktion zu finden, die unser Problem löst. Es ist jedoch so einfach, dass wir selbst für die Fehlerbehandlung sorgen müssen. Dazu gehören Array-Über- und -Unterläufe, Null-Zeiger-Fallen und der ganze Ballast, der mit der Verwendung der string.h-Bibliothek einhergeht. Nichtsdestotrotz können wir unsere Strings wie folgt definieren:

char * outString;
char * inString;
int nStart, nLength;

Die nächste Aufgabe besteht darin, inString zu initialisieren und in outString genügend Speicher zuzuweisen, um das Ergebnis der Mid-Operation zu speichern. Die Zuweisung einer Zeichenkette derselben Größe wie inString sollte ausreichen. Sobald dies geschehen ist, können wir die Funktion string.h strncpy verwenden, um die eigentliche Arbeit zu erledigen:

strncpy(outString, inString+nStart, nLength);

Die Initialisierung und Speicherzuweisung wird als Übung für den Leser überlassen, aber dieser Link sollte ein guter Ausgangspunkt sein. Die Lösungen neigen dazu, Speicher, Zeichenfelder und Zeichenketten als ein und dieselbe Sammlung von Bytes zu behandeln, ein Ansatz, der recht gut funktioniert.

Verwendung der C++ Standard String Library

Der bevorzugte Weg, eine Mid-Funktion zu implementieren, besteht schließlich darin, einfach die substring-Methode der Standardbibliothek der String-Klasse aufzurufen. Es ist wirklich so einfach, aber, wie üblich, gibt es einen gewissen Overhead:

#include <iostream>
#include <stdlib.h>
#include <string>

Die obigen Angaben geben nur die verschiedenen Bibliotheken an, die wir verwenden werden. Möglicherweise benötigen wir iosteam (cin und cout) zur Verarbeitung von Zeicheneingaben und -ausgaben, stdlib.h für allgemeine speicherbezogene Aufgaben und die String-Klasse für die Behandlung von Zeichenketten. Als Nächstes müssen wir dem Compiler/Linker mitteilen, dass wir die Implementierungen der Standardbibliothek verwenden möchten:

using namespace std;

Dies befreit uns von der Notwendigkeit, unseren Klassen jedes Mal das Präfix <class>:: voranzustellen, wenn wir sie verwenden wollen. Wir können also ein Objekt der Klasse string deklarieren:

string testString;

Jetzt sollten wir auch einen Wert in testString eingeben, und mit iostream können wir einfach eine Zeile wie die folgende schreiben:

cin testString;

Schließlich kann die Mid-alike-Funktion (Methode) aufgerufen werden:

cout testString.substr(0, 1);

Das ist alles, was benötigt wird. Letztendlich ist dies die beste Lösung für C++-Programmierer; C-Programmierer müssen sich damit begnügen, selbst eine Menge Code zur Fehlerprüfung (Bound Checking) zu schreiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert