Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » array

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 <
000
21.03.2008, 16:26 Uhr
~array
Gast


Auf welche Weise kann man ein Feld nach bestimmten Werten durchsuchen z.B. wie oft ein Buchstabe in einem Satz vorkommt.
Gibt es da unterschiedliche Methoden? Also ich spreche von einem einfachen 1 dimensionalen Feld , welches ich nach eine bestimmten Wert durchsuchen will.
Eine for Schleife ist da nicht so angebracht oder weil ich die die Länge nicht kenne.
Da scheint doch eine while schleife besser zu sein. Die dann bei der Bedingung /0 aufhört sprich am Ende des arrays. Aber wie kann ich die Werte im array vergleichen?Falls ich das über eine if anweisung machen soll wie kann dann Festellen ob es mehr als nur einen Wert geht.
Und wenn ich das Programm schreibe sollte ich das über eine Funtkion machen z.B
char *gets(char* buffer)// liest einen ganzen Satz ein
Danke schon mal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.03.2008, 19:27 Uhr
firefoxxi



Wenn ich dich richtig verstanden haben, dann willst du zählen wie oft ein bestimmtes Zeichen in einem Satz vorkommt? Und ich nehme an du hast einen String vom Typ char*? Dann hast du zwei Möglichkeiten. Entweder du nimmst einen weiteren Pointer und rückst du ihn nach jedem Vergleich weiter also etwa so:


C++:
char* p = str; // Wobei str dein Satz ist
while(*p!='\0')
{
  // Vergleichen
  p++;
}



Oder falls du keinen Pointer benutzen willst dann kannst du das auch mit einer for-Schleife machen. In etwa so:


C++:
int i;
for(i=0;str[i]!='\0';i++)
  // Vergleichen



Den Vergleich kannst du dann einfach mit einer if-Bedingung machen. Jedes mal wenn du ein entsprechendes Zeichen findest zählst du dann eine weitere Variable hoch.

Was genau meinst du mit "sollte ich das über eine Funktion machen". Sicherlich ist es sinnvoll diesen Programmblock in eine Funktion zu verpacken, der du den String und das zu zählende Zeichen übergibst und die dir dann die Anzahl der Vorkommnisse zurück gibt.
--
Gruß
firefoxxi

http://firebird-browser.de/
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.03.2008, 22:33 Uhr
~arry
Gast


ja super danke .ich glaube es schöner wenn ich es mit den pointer
programmiere, werde mich morgen ans programmieren machen und vielen dank noch mal.und das du mir gleich beide möglichkeiten gezeigt hast finde suppppppppppper. also noch eine schönen abend
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.03.2008, 00:20 Uhr
~array
Gast



C++:
char satz(char satz1);
void size(int x);

int main()
{
int i,x;
x=0;
char satz1[20];
printf("Geben sie den Satz ein:");
gets(satz1);

size(strlen(satz1));


for(i=0;satz1[i]!='\0';i++)
{
            if(satz1[i]=='e')          
        {    x=x+1;                  
             printf("%i\n",x);
        }
             }            
system ("Pause");
return 0;
}
    
void size(int x)
{
    printf("Der Satz besteht aus %i Zeichen.\n",x);  
      
  }


Hier mein Programm es klappt auch. Ich frage mich die ganze Zeit
wie ich in der if- Anweisung eine Zahl satz[i] mit einen Buchstaben vergleichen kann. Was mir auch noch unklar ist, ist die Bedingung bei der die for Schleife abschließt. .Ich weiss, dass ! negiert .
Wenn i an der Stelle von’ \0’ ist soll die Schleife enden .Ich habe aber den Eindruck das i doch mit \0 verglichen wird oder?
Der Zustand das i nicht \0 ist dann doch schon am Anfang geben.
Ich verstehe auch nicht wenn ich i satz[i] übergebe(in der if Anweisung) warum überschreibt es nicht die Buchstaben im satz[] und füllt sie mit den hoch gezählten Werten aus der for Schleife.
Wie ist es möglich das ich eine int mit ein Buchstaben vergleichen kann .
Ich habe mir das auch schon als Tabelle vorgestellt. Erst werden die Buchstaben eingelesen und an jedem Speicherplatz steht ein Buchstabe, dann folgt die for Schleife und da verweise ich ja auf den satz[i]!=’\0’ meine Endbedingung .Da ich vor der for Schleife mein Satz der Funktion übergeben habe, wird meine Ausgabe nicht verändert das ist doch so weit richtig oder? Das überschreiben des satz mit den int Werten bleibt somit Folgenlos aber wie kann ich Zahlen an Stelle der Buchstaben setzen und sie dann vergleichen?

Dieser Post wurde am 22.03.2008 um 15:01 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.03.2008, 12:39 Uhr
RedEagle



Buchstaben (Zeichen) sind auch nur Zahlen.
So ist z.B. 'A' == 0x41 (Im ASCII-Code)

'\0' entspricht dem Stringende.

Die for-schleife wird dadurch so oft durchlaufen, bis das Zeichen '\0' im string vorkommt.
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.03.2008, 14:09 Uhr
~array
Gast


das hilft mir jetzt nicht weiter .
Was mir wichtig, dass ich verstehen will ich ich satz[i] mit e vergleichen kann. Wenn du sagst das Buchstaben Zahlen sind ob Hexa oder ... wann sind die Werte gleich.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.03.2008, 15:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Er will sagen, dass jeder Buchstabe im System durch eine Zahl "repräsentiert" wird. Wenn du also mit 'e' vergleichst, dann ist es mehr oder weniger das gleiche wie wenn du mit der Zahl die 'e' repräsentiert vergleichst...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.03.2008, 15:55 Uhr
~array
Gast


Ok. der code war mir schon bekannt ich weiß auch wenn ich einen Buchstaben habe das ihm eine Zahl/ Wert im code zugewiesen wird . das ist mir auch klar . denn es gibt ja auch befehle mit denen man diese Zahl ausgeben kann wie z.B. & für die Adresse gilt in Verbindung mit einer Variable versteht sich .Was mein Problem ist, ist nicht zu verstehen das es sich
um Zahlen handelt. Die miteinander verglichen werden sonder das:
Wenn die schleife anfängt durchzulaufen und jedes mal ein Wert i(i=i+1) übergeben wird an die if(satz1[i]=='e') Anweisung geht das ja bis '0\' dann ist ja schluss.Wenn ich jetzt einen Satz eingebe bei dem ein e vorkommt z.B. an 3. Stelle habe ich den wert i an der 3.Stelle . Wie kann das denn sein, dass die beiden Zahlen übereinstimmen wie z.B. i=3, e=3 oder an einer anderen Stelle im Satz ist dieser Zustand da wieder der Fall das i und e gleich sind.Ich verstehe nicht wie jeder beliebige Wert von i immer =e ist ,wenn im Satz an einer anderen Stelle ein e vorkommt.
Denn die Zahl im code muß ja immer die gleiche bleiben für e.???????????????????????????
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.03.2008, 19:05 Uhr
firefoxxi



Ich glaube zu verstehen was dein Problem ist. if(satz[i]=='e') vergleicht nicht i mit 'e' sondern den Wert von satz an der Stelle i. D. h. wenn ich satz[0] nehme dann habe ich das erste Zeichen des Satzes. satz[1] ist das zweite Zeichen usw. Wenn du jetzt einen Satz hast in dem das 3. Zeichen ein e ist dann wird satz[2] eben 'e' sein. Kommt in dem Satz jetzt zum Beispiel an der 5. Stelle noch ein e vor dann ist satz[4] auch 'e'.
--
Gruß
firefoxxi

http://firebird-browser.de/
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.03.2008, 19:47 Uhr
~array
Gast


War in der Stadt was trinken und dann auf einmal habe ich es auch gesehen firefoxx hat vollkommen recht .Jetzt frage ich mich wie ich auf die Idee kam das ich die hoch gezählten Werte der for Schleife dem array übergebe, seltsam oder\ .Weil wenn ich das vorgehabt hätte dann hätte ich doch schreiben müssen z.B. :
array[i]=i .
Super nett von euch allen das ihr mir geholfen habt, danke noch mal.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: