wer kann mir bei diesem program helfen?
-
irgendwie geht das nicht, und ich weiss nicht wieso!!
wer kann helfen? wäre echt nett, danke!!#include <iostream> #include <conio.h> using namespace std; int main(void){ char * str="ABC-129"; int i = 0; while(*(str+i)){ if((*(str+i))>='A' && (*(str+i))<='Z') *(str+i)='X'; i++; } cout << str; getch(); return 0; }
-
Hallo,
ich hebe die Klammerausdrücke immer durch Leerzeichen deutlich in ihrer Funktion hervor,
soif( (*(str+i))>='A' && (*(str+i))<='Z' )kommt man nicht so leicht durcheinander.
Wenn du Stringliterale im Quelltext erzeugst,
alsochar * str="ABC-129";Dann ist das per C Standard so, dass man den String nicht verändern (beschreiben) darf.
Deshalb schreibt man besser immerconst char * str="ABC-129";Und wenn er verändert werden soll, dann macht man das als Array.
char str[] = {"ABC-129"};
-
Ersetze folgendes:
//char* str = "ABC-129"; char str[] = "ABC-129";In deinem Beispiel versuchst du ein konstantes String-Literal zu ändern.
Das darfst du nicht. Du musst, und willst sicher auch, einen String bearbeiten.

-
char * str="ABC-129";du versuchst in eine string-konstante zu schreiben. wenn du willst, daß str nicht auf eine konstante zeigt, dann mach es so:
char str[]="ABC-129";dann legt der compiler speicher fur ein char-array an und initialisiert ihn mit der stringkonstante.
EDIT: mist! schon wieder letzter

-
Na wenigsten darüber herrscht Einigkeit

-
und statt
*(str+i)kann man auch übersichtlicher
str[i]schreiben.
-
vielen dank für euere hilfe,
das problem vor dem ich stand bzw. stehe ist, dass ich alle [] weglassen soll. aber wenn das ´nicht anderst geht, wie ihr zurecht auch sagt, dann muss es wohl auch so sein.danke
-
Das bezog sich sicher nur auf die Adressierung, damit du beide Methoden kennenlernst.
Falls du auch in der Definition auf [] verzichtest, kannst du es auch
über malloc/free machen.
(Normalerweise nimmt man in C++ new/delete, aber dann brauchst du ja wieder das verbotene [] bei delete)
Wo da der Sinn liegen soll, naja
const char * tmp="ABC-129"; char* str = (char*) malloc(strlen(tmp)+1); //+1 wegen /0 strcpy(str, tmp); ... free(str);
-
also, wenn das eine aufgabe ist, dann hat der lehrer/professor mit den eckigen klammern bestimmt nur den arrayzugriff gemeint und nicht die deklaration/definition.
-
oh mann, jetzt ist mir alles klar.
wer lesen kann ist klar im vorteil *gg*
der lehrer meinte alle indexklammern, he, he!!
ich gehe nochmal ins bett!!!grüßle und danke