2 Stimmen

Sscanf mit mehreren Leerzeichen?

Sscanf(text, "%s %s", name, company);

parses 'ian mceknis' aber es parsen auch 'ian   mceknis' und so weiter. Wie kann ich das machen, dass nur der erste geparst wird? Es darf nur ein Leerzeichen enthalten, nicht mehr.

Danke.

2voto

Wayne Werner Punkte 45176

Wenn Sie möchten, dass es das letztere Beispiel ablehnt, müssen Sie Ihre eigene Funktion erstellen, um mehrere Leerzeichen zu finden/ablehnen.

Aber ich vermute, dass Sie eigentlich die zusätzlichen Leerzeichen entfernen wollen. Siehe: Wie entferne ich führende/trailing Leerzeichen auf eine standardisierte Weise?

0voto

j_random_hacker Punkte 49159

Sie können dies nicht nur mit sscanf() tun, da dies über recht grundlegende Funktionalitäten verfügt. Wenn Sie dies wirklich durchsetzen müssen (müssen Sie das?), sind möglicherweise reguläre Ausdrücke hier besser geeignet.

0voto

user2676070 Punkte 73

Es ist nicht das sauberste, aber so habe ich es für ein Projekt gemacht. Grundsätzlich nimmt es anstelle eines Leerzeichens im formatierten String bis zu zwei Leerzeichen ein (du kannst es auch so ändern, dass es auch mit Tabs oder ähnlichem umgehen kann). Wenn es nur ein Leerzeichen gibt, dann ist das zweite Zeichen immer noch null, und wenn es nicht null ist, dann wurde es überschrieben.

Also würde ich ändern:

sscanf(text, "%s %s", name, company);

zu:

char space[2] = "\0\0"
sscanf(text, "%s%2[ ]%s", name, space, company);
if(space[1] != '\0') {
    //Es gab ein zusätzliches Leerzeichen, behandele es entsprechend
}

-1voto

Alex F Punkte 40874

Laut der sscanf-Definition ist dies absolut unmöglich. Um das gewünschte Ergebnis zu erzielen, würde ich die Textvariable manuell lesen und nach zwei aufeinanderfolgenden Leerzeichen suchen. Wenn diese gefunden werden, ersetzen Sie das zweite Leerzeichen durch 0 und rufen dann sscanf auf.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X