Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » String zusammensetzen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.10.2011, 21:52 Uhr
R3aper



Hi Leute!

Ich bin noch Anfänger in Sachen c++.
Ich schreibe zur Zeit ein Programm, dass Strings einließt, die mit einem Unterstrich unterteilt sind. (z.B. "Hallo_22").

Das Programm sucht nun den Unterstrich und speichert die Chars davor in einer neuen Variable.

Der zugehörige Code ist:

C++:
    while (cin >> streingabe) {
        if (streingabe == "exit") break;
        pos = streingabe.find("_");
        for (int k = 0; k < pos - 1; k++) {
            strname[k] = streingabe[k];
        }
    }

        cout << strname << endl;



Vielleicht noch nebenbei:
Das mit der while-Schleife hat noch andere Gründe, die für diese Sache, aber nicht wichtig sind.

Das Problem:
Als Ausgabe bekomme ich immer nur einen leeren String, bzw. eine Leerzeile..

Ich brauche dringend Hilfe!

Danke für alle Antworten!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.10.2011, 23:02 Uhr
0xdeadbeef
Gott
(Operator)


Das ist etwas schwer zu sagen, ohne die Deklarationen von streingabe und strname zu kennen. Unter der Annahme, dass es sich um std::strings handelt, müsstest du, um es auf diese Weise zu machen, erst sicherstellen, dass strname auch groß genug ist, damit strname[k] immer definiert ist.

Wie dem auch sei, String-Splitting ist mit stringstreams einfacher zu haben, etwa

C++:
#include <iostream>
#include <sstream>
#include <string>

int main() {
  std::string streingabe, strname;

  std::cin >> streingabe;

  std::istringstream parser(streingabe);
  std::getline(parser, strname, '_');

  std::cout << strname << std::endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.10.2011, 10:50 Uhr
R3aper



Ist es nicht auch mit normalen Strings möglich?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.10.2011, 11:44 Uhr
0xdeadbeef
Gott
(Operator)


Das sind normale Strings.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.10.2011, 13:31 Uhr
R3aper



gibt es auch die Möglichkeit, alles nach dem "_" in einer Variable zu speichern?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.10.2011, 19:29 Uhr
0xdeadbeef
Gott
(Operator)


In diesem Fall, wo eingabe keine Whitespaces enthalten kann, ist das einfachste, operator>> zu benutzen, d.h.

C++:
#include <iostream>
#include <sstream>
#include <string>

int main() {
  std::string eingabe, name, rest;

  std::cin >> eingabe;

  std::istringstream parser(eingabe);
  std::getline(parser, name, '_');
  parser >> rest;

  std::cout << strname << ", " << rest << std::endl;
}


Dabei ist es wahrscheinlich sinnvoll, den Streamstatus nachher abzufragen, um fehlerhafte Eingaben (solche, die keinen Unterstrich enthalten) aussortieren zu können. Etwa

C++:
  std::istringstream parser(eingabe);
  std::getline(parser, name, '_');
  if(parser >> rest) {
    // Alles OK
  } else {
    // Kein _ im String
  }


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 30.10.2011 um 19:31 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: