PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitte um Nachhilfe beim Arbeiten mit Strings...



jean_luc_picard
12-04-2004, 06:21
Hallo Leute,

ich habe mich ja gerade erst an ncurses rangetraut ;) und mein Programm nun darauf aufgebaut. Das ist eigentlich schon fertig, die Programmierung würde ich aber nicht gerade als "sauber" bezeichnen.
Folgendes:
Ich habe den Bildschirm in mehrere Bereiche eingeteilt, u.a. ist ein Bereich für Hinweise zur Benutzung vorgesehen. Nun möchte ich diesen Bereich als "WIN" vorsehen und eine Fuktion soll dort entsprechende Meldungen hineinschreiben. Da ich mich nicht unbedingt um die Formatierung kümmern will, möchte ich die Meldung z.B. als String an eine Funktion übergeben, welche den String, sofern nötig, in mehrere Zeilen unterteilt:

Aus:


+-------------------------------+
| Fehler bei der Eingabe, Wert bitte neu eingeben.
| |
+-------------------------------+


Soll werden:


+-------------------------------+
| Fehler bei der Eingabe, Wert |
| bitte neu eingeben. |
+-------------------------------+


Es soll also nur an Leerzeichen geteilt werden...

Danke für jeden Hinweis ;), Gruß Picard

apriori
12-04-2004, 16:51
Hallo ... ich gebe dir nun mal zwei Möglichkeiten, wie du an die Sache rangehen kannst, ohne aber die Implementation zu zeigen/schreiben, das ist eigentlich ja auch deine Arbeit.

Nun, die eine Möglichkeit hast du ja schon selbst angerissen, das Trennen des Text bei Leerzeichen bzw. Wortweise Aufsplittung. Du könntest dann alle Wörter der Reihe nach wieder zusammensetzen, und wenn sie über die Grenze hinausfliegen sollten ( also wenn die aktuelle Zeile zu lang ist ), fügst du ein '\n' hinzu.

Die zweite Möglichkeit ist nur geringfügig anders, erfordert aber nicht die wortweise Aufsplittung. Wieder gehst du den String bis zu der Stelle durch, an der du die gewünschte Maximallänge überschreitest und dann folgt eine Fallunterscheidung:
1: an der aktuellen Position befindet sich ein Leerzeichen -> ersetzen durch '\n'
2: an der aktuellen Position befindet sich kein Leerzeichen -> String zurück durchgehen, bis zum letzten Leerzeichen und dieses durch '\n' ersetzen

So, damit sollte es eigentlich geschafft sein, die Umsetzung ist jetzt deine Arbeit :)
[ sicher gibt es zig bessere Möglichkeiten, aber diese hier sind einfach, also nicht an die Decke gehen, sollten sie jemanden nicht gefallen ;) ]

HangLoose
12-04-2004, 19:20
moin

hier ein möglicher lösungsansatz


#include<stdio.h>
#include<string.h>

int main(void)
{
char string[]="ein ganz langer und uebler string";
int i, j;

for(i=0; i<strlen(string); i++){

if(i%16 == 0 && string[i]==' ')
string[i]='\n';

if(i%16 == 0 && string[i]!=' '){
for(j=i; string[j]!=' '; j--);
string[j]='\n';
}

}
printf("%s", string);
return 0;
}

der string wird nach 16 zeichen getrennt.


Gruß HL

HangLoose
13-04-2004, 16:56
moin

das ganze nochmal als funktion


#include<stdio.h>

void newline(char *s);

int main(void)

{
char string[]="ein ganz langer und uebler string";

newline(string);

printf("%s", string);
return 0;
}

void newline(char *s)
{
int i, j;

for(i=0; i<strlen(s); i++){

if(i%16 == 0 && s[i]==' ')
s[i]='\n';

if(i%16 == 0 && s[i]!=' '){
for(j=i; s[j]!=' '; j--);
s[j]='\n';
}
}
}



Gruß HL