[C++] char[] -> UPCASE

Registriert
Okt. 2004
Beiträge
5
Hallo!

Habe bei einem Programm so einige Schwierigkeiten:

1) Ich möchte aus einem "String", also einem char[], alle Buchtaben in den UPPERCASE setzen und die restlichen Zeichen unverändert lassen.
Das Ganze möchte ich als eigenständige Funktion schreiben, da ich dieses Prozedere mehrmals verwenden muss.
Ich habe aber so meine Schwierigkeiten mit dem Array bzw. dem Pointer.

2) Ich möchte mit scanf("%s", text) in mein char text[100] einen Text einlesen, jedoch stürzt mein Programm beim ersten Leerzeichen ab.


Das sollte für den Anfang genügen!

:)
 
Re: char[] -> UPCASE

Oh, ich sollte vielleicht erwähnen, dass ich das ganze in C++ schreibe... Sorry! ;)
 
Re: char[] -> UPCASE

Willkommen im Forum :)

Bitte lies dir mal die Regeln durch, auch die Forumsspezifischen.
Wenn es um programmieren geht, sag welche Sprache, welche Software, Komponenten, etc ... kann nicht schaden.

Hier mal was für Uppercase:

Code:
#include <ctype.h>
#include <string.h>

int main( void )
{
    putchar( _toupper( text ) );
}

//edit: bist sogar von selbst draufgekommen. Es gibt auch die äußerst praktische Edit-Funktion für sowas ^^
 
Re: char[] -> UPCASE

Danke, die Methode ist schonmal sehr nützlich.
Jedoch weiß ich immer noch nicht, wie ich daraus jetzt eine eigene Funktion mache, die das Array nicht nur lokal, sondern global ändert...

BTW: Ich programmiere unter Dev-C++.
 
Zuletzt bearbeitet:
Re: char[] -> UPCASE

Stickstoffstier schrieb:
Danke, die Methode ist schonmal sehr nützlich.
Jedoch weiß ich immer noch nicht, wie ich daraus jetzt eine eigene Funktion mache, die das Array nicht nur lokal, sondenr global ändert...

BTW: Ich programmiere unter Dev-C++.

Das was du siehst ist ja sogesehen nur noch der Funktionsaufruf, die Funktion selbst in der oben eingefügten Bibliothek schon enthalten :cool_alt:
 
Re: char[] -> UPCASE

value schrieb:
Das was du siehst ist ja sogesehen nur noch der Funktionsaufruf, die Funktion selbst in der oben eingefügten Bibliothek schon enthalten :cool_alt:

Ja, das weiß ich auch! :)

Das hier ist das Code-Fragment:
Code:
printf("Text: ");
scanf("%s", text);
printf("\nWas wollen Sie mit dem Text machen?\n");
printf("1) Encodieren\n2) Decodieren\nIhre Wahl: ");
scanf("%i", &option);
    
// Setzt Text und Codewort in UPCASE
j = k = 0;
for(i = 0; i < tl; i++){
    if (text[i] == '\0') break;
    else if (text[i] == ' ') continue;
    else text[j++] = toupper(text[i]);
    if (codeword[i] != '\0')
        codeword[k++] = toupper(codeword[i]);
}

Was ich aber eigentlich möchte, ist eine Funktion, der ich ein char-Array übergebe, das dann dort global verändert wird.

Z.B.:
Code:
upcase1 (const char* text);
    oder
upcase2 (char * text[]);
Ich weiß aber nicht, von welchem Rückgabetyp die Funktion sein muss und wie ich auf das Array zugreife...
 
Re: char[] -> UPCASE

ich denke du progst c++? warum ärgerst du dich dann im c strings rum? nimm einfach nen std::string wie es sich bei c++ gehört und nutze die uppercase funktion(wie immer sie da genau heist, einfach mal ausprobieren ;)). fals du doch bei c bleiben willst, musst du eine funktion schreiben die einen pointer auf char als erstes argument und als seites die länge des arrays haben will. c arrays sind nix anderes als pointer. und die länge brauchst du um das ende des arrays zu finden, sonst bekommst du eventuel speicherzugriffsfehler.
 
Code:
toupper()

<-- Deine Upper-Funktion, ist schon alles da in der #ctype.h
 
wenn er c++ proggen will sollte er trotzdem std::string nehmen. und ansonsten sich gleich mal die ganze stl ansehen. printf hat in einem c++ programm auch nix verloren.
 
Wenn du den String per call-by-reference an deine Funktion übergibst brauchst du keinen Rückgabewert, das Ganze geht dann also z.B. so:

Code:
//c
#include <cstring>
#include <cstdio>
#include <cctype>

//c++
#include <string>
#include <iostream>
#include <algorithm>

using namespace std;

void cUpper(char* text)
{
	for(size_t i=0; i< strlen(text); ++i)
		text[i]=toupper(text[i]);
}

void cppUpper(string& text)
{
	std::transform(text.begin(),text.end(),text.begin(),toupper);
}

int main()
{
	//c
	char text[256];
	printf("Text: \n");
	scanf("%s", text);
	cUpper(text);
	printf("%s\n",text);

	//c++
	string txt;
	cout << "Text: " << endl;
	cin >> txt;
	cppUpper(txt);
	cout << txt << endl;;
}
 
Zuletzt bearbeitet:
Mann, Wahnsinn!

Vielen Dank für die vielen Vorschläge etc.

Noch ein paar Sachen zur Erläuterung:
Ich programmiere zwar in C++, jedoch mit einigen "Vorgaben" z.B. soll ich kein String, sondern char[] benutzen.

Call-by-Reference habe ich auch schon probiert, aber anscheinend falsch, da ich innerhalb der Funktion weiterhin den Pointer genutzt habe, also z.B.
Code:
void myUpper(char * text)
{
while((*(text++) = toupper(*(text))) != '\0');
}

Was wohl irgendwie nicht immer so gut funktionierte. :)

Ich werde das aber jetzt mal auf die Methode von Post #10 versuchen!

THX
 
Zurück
Oben