Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » umwandlung eines c-strings in großbuchstaben ?!

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 < [ 2 ]
000
31.05.2006, 14:03 Uhr
Juergen01



Erstmal ein herzliches Hallo an alle!

Nun zu meiner Frage:

wir haben gerade mit pointern angefangen und sollen diese aufgabe lösen:

Schreiben Sie Programme für die unten beschriebenen Aufgaben. Es handelt sich um die
Verarbeitung von Zeichenketten, die als C-Strings repräsentiert sind (Null terminierte char
Felder). Verwenden Sie die Pointerschreibweise (z.B.: *(s+1) und nicht s[1] !!). Verwenden
Sie nicht die existierenden Bibliotheksfunktionen. Es sollen folgende Funktionalitäten in
Programmen implementiert und durch geeignete Ein- und Ausgaben demonstriert werden:
a) Umwandlung eines C-Strings in Großbuchstaben.

ich hab so angefangen:
...
char *hallo="irgend ein text \0";
...

so jetzt will ich den string in großbuchstaben ausgeben.
dazu hab ich diese funktion gefunden,
char *StrUpper(char *s)
die angeblich klein in großbuchstaben umwandelt.
also hab ich sie einfach mal darunter gesetzt.

char *hallo="irgend ein text \0";
char *StrUpper(char *hallo);

und ein cout von hallo gemacht aber es ist immer noch alles in kleinbuchstaben

kann mir hier jemand weiterhelfen ?

gruß
Jürgen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.05.2006, 15:05 Uhr
ao

(Operator)



Zitat:
char *StrUpper(char *hallo);

Das ruft die Funktion nicht auf, sondern deklariert sie bloß.

So müsste es gehen:

C++:
char *HALLO = StrUpper (hallo);
std::cout << hallo;



Nochn Tipp:
Behalte für die Zukunft im Hinterkopf, dass es in C++ viel bessere Möglichkeiten zur Speicherverwaltung gibt als diese steinzeitlichen C-Arrays. std::string, std::vector, std::list und Konsorten sind deine Freunde.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.05.2006, 16:52 Uhr
Pler
Einer von Vielen
(Operator)



Zitat:

char *hallo="irgend ein text \0";


Das geht doch gar nicht.?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.05.2006, 17:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


zumindest ist das \0 hinten dran sinnfrei und so eine definition ist gefährlich, da der text wenn man pech hat im textsegment abgelegt wird und dadurch natürlich eigentlich "const" ist
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.06.2006, 17:45 Uhr
~co
Gast


nimm doch einfach ein langes wort, das hat wahrschienlich einen besseren Effekt!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.06.2006, 18:31 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von Juergen01:

Schreiben Sie Programme für die unten beschriebenen Aufgaben. Es handelt sich um die
Verarbeitung von Zeichenketten, die als C-Strings repräsentiert sind (Null terminierte char
Felder). Verwenden Sie die Pointerschreibweise (z.B.: *(s+1) und nicht s[1] !!). Verwenden
Sie nicht die existierenden Bibliotheksfunktionen.
Es sollen folgende Funktionalitäten in
Programmen implementiert und durch geeignete Ein- und Ausgaben demonstriert werden:
a) Umwandlung eines C-Strings in Großbuchstaben.
......


dazu hab ich diese funktion gefunden,
char *StrUpper(char *s)
die angeblich klein in großbuchstaben umwandelt.


Ich dachte du darfst nix fertiges nehmen?
StrUpper kenn ich überhaupt nicht und das einzige was ich bei google gefunden hatte war ne Pascal funktion .
Naja wie dem auch sei.
Eine mögliche Implementierung einer eigenen StrUpper Funktion könnte in etwa so aussehen.

C++:
#include <stdio.h>

char* StrUpper(char* buf,size_t size)
{
    size_t idx=0;
    while(idx<size)
    {
        if( (*(buf+idx)>=97) && (*(buf+idx)<=122))
            *(buf+idx)-=32;
        ++idx;
    }
    return buf;
}

int main()
{
    char buf[]="Das ist ein bekackter Test mit ZaHLen 87165247 und \"$%$\"%$§\"%$ Sonderzeichen,du!";
    printf("%s\n",StrUpper(buf,sizeof(buf)));

    return 0;
}


Das Ganze in C weil sowas für C++ ne Beleidigung wäre.
Das Ganze arbeitet nämlich nur mit dem Ascii Zeichensatz und es gibt halt nunmal auch noch etliche andere.
Entsprechende C++ Methoden lösen das Ganze unabhängig vom verwendeteten Zeichensatz....aber die darfst du ja alle nicht benutzen .

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.06.2006, 19:16 Uhr
Juergen01



yippi hatt funktioniert und ich habs sogar verstanden .

Vielen Dank für die schnelle und kompetente Hilfe

Gruß Jürgen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.06.2006, 19:31 Uhr
Pler
Einer von Vielen
(Operator)


Das war ja wohl auch so gemeint, dass er StrUpper selber scheiben soll.
Allerdings hat er jetzt doch was fertiges genommen. Auch wenns von dir ist!

@Juergen:

Code:
if( (*(buf+idx)>=97) && (*(buf+idx)<=122))
            *(buf+idx)-=32;


Hast du verstanden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.06.2006, 08:37 Uhr
ao

(Operator)



Zitat von Spacelord:

C++:
char* StrUpper(char* buf,size_t size)


Wozu denn eine Größenangabe bei einem Null-terminierten String?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.06.2006, 10:13 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:


C++:
char* StrUpper(char* buf,size_t size)
{
    size_t idx=0;
    while(idx<size)
    {
        if( (*(buf+idx)>=97) && (*(buf+idx)<=122))
            *(buf+idx)-=32;
        ++idx;
    }
    return buf;
}




boah ist das kompliziert für nen eigentlichen einzeiler


Zitat:

Wozu denn eine Größenangabe bei einem Null-terminierten String?



Vielleicht bis maximal zum so und sovielten Zeichen
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 02.06.2006 um 10:13 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: