Char-Arrays

Hallo,
Wie kann man abfragen, ob in einem char array nur eine bestimmte anzahl von buchstaben enthalten ist=?

Hallo Fragewurm,

Wie kann man abfragen, ob in einem char array nur eine
bestimmte anzahl von buchstaben enthalten ist=?

Meinst du jetzt Zeichen [strlen()] oder sollen nur die Buchstaben ['a
‚z‘ und ‚A‘
‚Z‘] gezĂ€hlt werden?
Oder willst du etwas ganz anderes?

MfG Peter(TOO)

Hallo,

Wie kann man abfragen, ob in einem char array nur eine
bestimmte anzahl von buchstaben enthalten ist=?

Deine Frage ist mehrdeutig formuliert, kannst Du
das verstÀndlich an einem Beispieldarlegen -
was Du genau machen möchtest?

GrĂŒĂŸe

CMБ

Ich möchte ein Programm schreiben, das mich französischvokabeln abfragt.
Das habe ich jetzt auch fast geschafft, das sieht in etwa so aus:

printf(„m%cnnliche form von ‚kanadisch‘:“, ae);
scanf("%s", Vokabel);
if(( Vokabel[0] == 99) && ( Vokabel[1] == 97) && ( Vokabel[2] == 110) && ( Vokabel[3] == 97) && ( Vokabel[4] == 100) && ( Vokabel[5] == 105) && ( Vokabel[6] == 101) && ( Vokabel[7] == 110))
{
printf(„Richtig!\n\n\n\n“);
vp++;
}

wer französisch hatte weiß aber, das man jetzt genauso gut die weibliche form von Kanadisch, nĂ€mlich canadienne eingeben könnte, da ja nur ĂŒberprĂŒftwird, ob die ersten zeichen „canadien“ enthalten.

Hallo

Ich möchte ein Programm schreiben, das mich
französischvokabeln abfragt.
Das habe ich jetzt auch fast geschafft, das sieht in etwa so
aus:

wer französisch hatte weiß aber, das man jetzt genauso gut die
weibliche form von Kanadisch, nÀmlich canadienne eingeben
könnte, da ja nur ĂŒberprĂŒftwird, ob die ersten zeichen
„canadien“ enthalten.

Aha.

Ich denke mal, C ist eine der „ungĂŒnstigsten“
Programmiersprachen ĂŒberhaupt, um so etwas
zu machen. Hier wĂŒrde ich unbedingt eine
„Hoch Ebene“-Programmiersprache wie
Javascript, Perl, oder - wenn’s unbedingt
sein muß - auch Ruby oder Python nehmen.

Dort ist das ziemlich einfach zu machen.
(RegulĂ€re AusdrĂŒcke zur Textbewertung).

GrĂŒĂŸe

CMБ

1 Like

Ich glaube mit der Funktion strcmp() lÀsst sich das ganze besser lösen:

printf("Wie heißt .... ?\n");
char vokabel[256];
scanf("%s", vokabel);
if(!strcmp(vokabel, "richtigelösung"))
{
 printf("richtig\n");
}
else
{
 printf("falsch\n");
}

strcmp() vergleicht zwei Strings (char arrays) miteinander und gibt bei Gleichheit 0 zurĂŒck. FĂŒr mehr Informationen einfach googlen.

mfg dixxi

Hallo

wer französisch hatte weiß aber, das man jetzt genauso
gut die weibliche form von Kanadisch, nÀmlich
canadienne eingeben könnte, da ja nur ĂŒberprĂŒftwird,
ob die ersten zeichen „canadien“ enthalten.

 // "canadien"
bool passt(const char \*ausListe, const char \* eingabe)
{
 return (strstr(ausListe, // suchen in
 eingabe) == // welches Token
 ausListe);
 // == true bedeutet, das Token findet sich zu Beginn
}

Bei Erfolg gibt die strstr() den char-Zeiger zurĂŒck, wo sie das Token gefunden hat.

C ist in der Tat nicht die Sprache, die sich fĂŒr Text direkt aufdrĂ€ngt, um es mal höflich zu sagen. Man muss sich erst eine eigene Lib dafĂŒr schreiben, damit das ertrĂ€glich wird.

lG
Martin B

So, danke ertsmal an dixxi, mit strcmp funktioniert es, aber es ht sich ein neues Problem aufgetan, und zwar meint mein compiler, dass wenn man jetzt „QuĂ©bec“ eingibt, das das nicht gleich „QuĂ©bec“ ist, was an dem Ă© liegen muss, da es wenn keine Umlaute enthalten sind, ja funktioniert 
 weiß jemand, wie ich das problem löse?

printf("‚Quebec‘:");
scanf("%s", Vokabel);
if(strcmp (Vokabel, „QuĂ©bec“) == 0)
{
printf(„Richtig!\n\n\n\n“);
vp++;
}
else
{
printf(„Falsch!\nRichtig ist ‚Qu%cbec‘!\n\n\n\n“, ea);
vn++;
}


wenn keine Umlaute enthalten sind, ja funktioniert 


Umlaute sind soweit ich weiß nicht Teil des ASCII Codes und teileweise auch nicht des ANSI Codes, der ja verwendet wird um festzulegen welches Zeichen ein char jetzt ist.

Ich weiß nicht ob das dein Problem lösen könnte, aber du könntest auf Unicode umsteigen. Dann benötigst du aber den Datentyp wchar (oder wchar_t) und die entsprechenden Unicode Synonyme deiner Stringfunktionen.

int wcscmp(
 const wchar\_t \*string1,
 const wchar\_t \*string2 
);

Sollte das glaube ich sein. Wie man einen wchar_t jetzt aber ausgibt (ob das mit printf funktioniert) weiß ich leider selber nicht. Ich habe noch nie mit Unicode gearbeitet.

Dann hĂ€ttest du zumindest UnterstĂŒtzung fir alle möglichen druckbaren Zeichen.

Ich hoffe, dass du mit dem Ansatz was anfangen kannst.

mfg dixxi

die Umlaute sind schon im ASCII, sie sind nur nicht im Bereich von -128-127, weswegen man vokabel als unsigned char deklarieren muss, da zb â€žĂ©â€œ nummer 130 ist, und man durch das unsigned ja bewirkt, das der bereich von-128-127 auf 0-255 erweitert wird

Man könnte jetzt natĂŒrlich fĂŒr jedes einzelne element der variable testen, welches zeichen darin gespeichert ist,

if( vokabel[3]== 130)
{
printf(„der vierte Buchstage ist ein Ă© !“)
}

aber das wĂ€re ziemlich viel schreibarbeit, und danach mĂŒsste man noch prĂŒfen, wie lang das wort ist
 ich weiß also schon, das umlaute im ASCII vorhanden sind, ich weiß nur noch nicht, wie ich diese information in strcmp einbauen soll =D