string Problem mit strcmp

Dieses Thema im Forum "C/C++" wurde erstellt von foexle, 02.01.2008.

  1. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    Sers Leute,

    ich hätte da mal eine kleine frage, evtl weis das ja wer auf anhieb.

    und zwar folgender aufruf:

    Code:
    char* kette[WERT], kette2[WERT];
    
                 cout << "Bitte String 1 eingeben: ";
                 for (int i = 0; i < WERT ; i++){
                         cin >> puffer;
                         kette[i] = new char[strlen(puffer)+1];
                         strncpy(kette[i], puffer, strlen(puffer)+1);
    
    
                 }
            	 
                 cout << "Bitte String 2 eingeben: ";
                 for (int j = 0; j < WERT ; j++){
                         cin >> puffer;
                         kette2[i] = new char[strlen(puffer)+1];
                         strncpy(kette2[i], puffer, strlen(puffer)+1);
    
    
                 }
    
    das ist kein problem, der lagert nun den string den ich in der shell eingebe, in dem 2dim. array ab nun die frage
    wie könnte ich das hinbekommen, das die standarteingabe cin die leerzeichen ignoriert und ich den kompletten string in ein 1dim. array bekomme?

    also aus

    asd asd rr

    soll dann nich
    [0] asd
    [1] asd
    [2] rr
    werden

    sondern
    asdasdrr

    könnte mir da wer weiterhelfen?

    achja und ohne stringklasse muss mit zeigerarythmetik sein. also vektor verwenden ist nicht

    mfg

    falls ich ne info vergessen habe bitte fragen

    mfg
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 dietox, 02.01.2008
    Zuletzt bearbeitet: 02.01.2008
    dietox

    dietox Eroberer

    Dabei seit:
    26.05.2007
    Beiträge:
    74
    Zustimmungen:
    0
  4. #3 Lesco, 02.01.2008
    Zuletzt bearbeitet: 02.01.2008
    Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Du hast übrigens eine buffer overflow-Schwachstelle drin, falls puffer ein char-Array ist(wonach es auch aussieht). Ich würde an deiner Stelle zeichenweise vorgehen und mit realloc arbeiten. Das könnte dann etwa so aussehen:
    Code:
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
    	char *strings[2] = { NULL,NULL };
    	for(int i=0;i<2;i++) {
    		char c;
    		int j=0;
    		do {
    			cin.get(c);
    			if( c != ' ' ) {
    				strings[i] = (char*)realloc(strings[i],j+2);
    				strings[i][j++] = c;
    			}
    		} while( c != '\n' );
    		strings[i][j] = 0;
    		cout << "strings[" << i << "]: " << strings[i] << endl;	
    	}
    }
    
    
    Die beiden Strings hast du dann in dem strings[]-Array.

    Statt realloc könntest du natürlich auch delete und new verwenden, was imho aber umständlicher ist. Eine andere Optimierung wäre noch, jeweils größere Blöcke aufeinmal per realloc zu alloziieren und am Ende das Ganze zu kürzen, was ein wenig performanter wäre.

    Allerdings bin ich weiterhin auf der Suche nach dem "string problem mit strcmp" aus dem Threadtitel, denn ein strcmp steht hier nirgends und wird auch nicht erwähnt. ;)
     
  5. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    jo sry hab im code was vergessen ;) der titel war bissal überschnell gewählt, ich brauche das 1 dim array um ein strcmp mit 2 strings zu machen ... allerdings muss ich zuvor die leerzeichen raus bekommen

    aber das mit dem cin.ignore ist ne gute idee das werde ich mal testen

    dank euch beiden

    -.- das mir das nicht selber eingefallen ist hmpf
     
  6. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    ... ich bin mir nicht sicher.... aber verbraucht "realloc" nicht mehr Leistung des Systems als wenn man mit "new()" einmal deklariert?

    Bin mir da einfach nicht sicher :D, kann mich natürlich auch total irren!
     
  7. Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Die Sache ist, dass man im voraus nicht wissen kann, wieviel Speicher man denn nun benötigt. Daher reicht "mit new() einmal deklarieren" nicht immer aus. Ich habe schon erwähnt, dass es performanter ist, jeweils Blöcke von n Bytes zu reservieren, was die Anzahl der realloc()-Aufrufe(statt realloc() kann man auch new und delete nehmen, aber soweit ich weiß ist realloc in diesem Fall besser geeignet, da man lediglich ein vorhandenen Speicherblock vergrößern will) drastisch senken würde. Dies habe ich aber im Beispiel zwecks Übersichtlichkeit mal weggelassen.
     
  8. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    ... kann es sein das ein NULL Pointer ausreichen würde? :)

    Was das mit realloc angeht wirst du warscheinlich recht haben! ;)
     
  9. Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Der Threadersteller wollte, dass zwei Strings eingelesen werden, daher wird das Array mit diesen zwei Strings auch mit 2 Werten initialisiert(char *strings[2]).
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    sind in deinem fall nicht

    *string[0]
    *string[1]
    *string[2]

    3 platzhalter vergeben? Und man kann alle doch auch mit char *string[] = { NULL } initalisieren.

    Aber es ist ja nun auch nicht so wichtig^^. Problem gelöst und von daher! Man sieht sich ;)
     
  12. Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Zu den 3 Platzhaltern: Nein. Die Zahl in den eckigen Klammern bei der Deklaration bezeichnet die Anzahl der Elemente in dem Array, nicht den höchsten Index(also strings[0] und strings[1] existieren, daher 2 Elemente).
    Bei dem anderen Punkt habe ich mich geirrt, der Kompiler akzeptiert auch "char *strings[2] = { NULL };".
     
Thema:

string Problem mit strcmp

Die Seite wird geladen...

string Problem mit strcmp - Ähnliche Themen

  1. Problem mit String-Manipulation

    Problem mit String-Manipulation: Hi, ich möchte eine URL aus einem Quellcode (html) extrahieren. Die URL steht in einem Eingabefeld mit den folgenden Eigenschaften <input...
  2. toUTCString() Problem

    toUTCString() Problem: Hallo Zusammen Ich brauch für mein Script das toUTCString() Commando für den Timestamp. Das Script ist in England stationiert, und ich brauch...
  3. Probleme mit Shell-Script (Listen, Strings, etc.)

    Probleme mit Shell-Script (Listen, Strings, etc.): Schönen guten Morgen! Ich habe leider einige kleine Probleme mit einem Shell-Script - bzw. weiss ich nicht wie ich richtig ansetzen bzw. weiter...
  4. Problem beim ersetzen von Zeichen im String

    Problem beim ersetzen von Zeichen im String: Also üeberall im String wo ein Punkt vorkommt soll dieser durch das letzte ergebnis ersetzt werden. Allerdings ersetzt er nur den ersten richtig...
  5. Kdevelop #include <string> Probleme

    Kdevelop #include <string> Probleme: Hi, ich will ein Progamm schreiben und bekomme trotz #include <string> die Fehlermeldung "error: 'string' does not name a type". Könnt Ihr...