Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zeichenkette 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 < [ 2 ]
000
20.02.2004, 12:07 Uhr
~Susi
Gast


Hallo,

ich habe ein Array, das in jedem Feld einen Buchstaben enthält:
z.B. array[0] = "i", array[1]="c", usw.

Jetzt möchte ich diese einzelnen Buchstaben gerne in einen String o.ä. zusammensetzten. Wie geht das, wer kann mir helfen?

Dankeschön
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.02.2004, 12:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


in dem fall ist dein array schon ein string...
du musst nur dafür sorgen das er am ende nullterminiert ist dann kannst du ihn ausgeben...
wenn du strings konkattenieren willst kannst du das z.b mit strcat oder sprintf machen...

ach so wenn du einzene zeichen setzt nicht die dopellten hochkommata verwenden sondern die einfachen...
also

C++:
array[0] = 'i';array[1]='c';//...usw.


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.02.2004, 12:15 Uhr
~Susi
Gast


und wie mach ich das *g*, hab eigentlich nicht so viel ahnung von c++ (wie man sicher merkt)

Dankeschön
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.02.2004, 12:25 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ok kleines beispiel


C++:
#include <stdio.h>
int main(){
char myarray[100];

//so jetzt gibst massenweise möglichkeiten damit rumzuspielen
sprintf(myarray,"%s","Hallo");  //schreibt hallo und dein array und nullterminiert es
printf("%s\n",myarray);

//so jetzt machen wir mal ein Hello draus
myarray[1]='e';
printf("%s\n",myarray);
}



Alles klar?

ach so du solltest dich noch entscheiden ob du erstmal c oder c++ verwenden willst... c++ macht einem einiges leichter allerdings steigt man besser hinter die zusammenhänge wenn man erstmal mit c anfängt und dann später auf c++ umsteigt...
das beispiel oben ist in c
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 20.02.2004 um 12:26 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.02.2004, 12:25 Uhr
~Susi
Gast


Oder anders gefragt, ich hab das jetzt hinbekommen, allerdings ist das alles in einer Funktion und ich bekomm das ergebnis nicht an main zurück.

Woran liegt der fehler?



C++:
char Funktion()
{
    char erg[100];
....
    erg[m]='\n';
    
   cout<<"Ergebnis ist "<<erg;
   return(erg[100]);
}  



und in main:

C++:
char erg = Funktion;
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.02.2004, 12:27 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das geht nicht so ohne weiteres wie du das gemacht hast, weil erg[100] ein zeiger auf ein array ist und dein erg in der mainmehtode einfach nur ein zeichen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.02.2004, 12:32 Uhr
~Susi
Gast


Oh man, das macht mich echt fertig, wieso muss das so kompliziert sein??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.02.2004, 12:39 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


naja das ist nicht wirklich so kompliziert...
problem bei der sache ist halt das du in c nur als datentyp ein char hast...
also platz für ein zeichen...
wenn du viele zeichen haben willst also einen string, dann verwendest du halt ein array von chars...
bei arrays ist der name des arrays nunmal ein zeiger (bzw. pointer) auf das erste element des arrays....
dein problem ist glaube ich eher das du noch ein bisschen üben musst mit arrays und pointern umzugehen...

wenn dich das mit dem chararray nervt kannst du statt dessen auch ein std::string nehmen der funktioniert intuitiver und wahrscheinlich so wie du dir das vorgestellt hast. geht allerdings nur in c++
wenn du allerdings ernsthaft programmieren willst kommst du eh nicht drum rum die mit arrays und pointern zu beschäftigen

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

int main(){
std::string mystring ="Hello ";
mystring+="World";
std::cout<<mystring<<std::endl;
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.02.2004, 12:47 Uhr
ao

(Operator)



Zitat:
~Susi postete

C++:
char Funktion()
{
    char erg[100];
....
    erg[m]='\n';
    
   cout<<"Ergebnis ist "<<erg;
   return(erg[100]);
}  




Du willst in Wahrheit den ganzen String übergeben und nicht nur ein einzelnes Zeichen, stimmts? Das geht so nicht. Mehrere Fehler.

1. Deine Funktion gibt nur ein einzelnes Zeichen zurück und nicht das ganze Array.

2. Das Array hat 100 Elemente (erreichbar über erg[0] bis erg[99], in C beginnt die Indizierung *immer* bei 0). Im return-Statement greifst du auf das 101. Element zu, das gar nicht definiert ist. Das kann zufälligerweise funktionieren oder auch abstürzen.

3. Arrays werden nicht als Arrays aus Funktionen herausgereicht, sondern als Pointer. Formal richtig wäre also

C++:
char * Funktion()
{
    char erg[100];
....
    erg[m]='\n';
    
   cout<<"Ergebnis ist "<<erg;
   return erg;
}  



4. Richtig funktionieren würde das aber immer noch nicht, weil erg[] ein lokales Objekt innerhalb der Funktion ist. Dieses Objekt hört auf zu existieren, wenn die Funktion verlassen wird (d.h. an der schließenden Klammer). Du hast als Funktionsergebnis noch einen Zeiger auf das Objekt in der Hand, den du aber nicht mehr benutzen darfst, weil das Objekt nicht mehr lebt; der Speicherbereich darf vom Betriebssystem überschrieben werden. Es kann sein, dass du die richtigen Daten noch rausholen kannst (wenn der Speicher noch nicht überschrieben wurde), trotzdem sollte man so nicht programmieren, denn irgendwann fällt man damit auf den Bauch.

5. Man könnte sich nun in der Funktion dynamisch Speicher holen:

C++:
char * Funktion()
{
    char *erg = malloc (100);
....
    erg[m]='\n';
    
   cout<<"Ergebnis ist "<<erg;
   return erg;
}  


Nachteil ist, dass der Aufrufer von Funktion () wissen muss, dass er den Speicher irgendwann wieder freigeben muss, sonst entsteht ein Speicherleck.

6. Wenn Funktionen Arrays manipulieren, ist es darum am sichersten, wenn der Aufrufer den Speicher bereitstellt und in die Funktion hineinreicht:

C++:
void Funktion(char * erg, int len)
{
    /* len gibt an, wieviel Platz bei erg reserviert ist
       Funktion muss diese Groesse beruecksichtigen und
       darf nicht mehr Zeichen in den Speicherbereich eintragen. */


    /* Speicher fuellen */
    erg[0] = ......;

    /* letztes Zeichen: */
    erg [len-1] = ....;
    
}  

int main (void)
{
    char erg [100];

    Funktion (erg, 100);

    /* ... und mit erg was anfangen */
}



ao

Dieser Post wurde am 20.02.2004 um 12:49 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.02.2004, 12:56 Uhr
~susi
Gast


Vielen vielen Dank, werde damit jetzt mal mein Glück probieren.
 
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: