Seite 1 von 1

Die Worte in einen String umwandeln.

Verfasst: Mo Apr 23, 2012 8:13 pm
von Nicole
Guten Tag, ich habe ein Problem.
Ich muss in meinen neuen Programm eine Parameterübergabe machen, und die Worte die man vorher eingeben ( 1 - n) kann, umwandeln so dass jeder Buchstabe sich in ein kleinen Buchstaben umwandelt.

Code: Alles auswählen

#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
....
}
// Das ist die Funktion://

void worte_linksbuendig_kleinbuchstaben_ersetzten(int argc, char *argv[])
{

/*////////////////////////////////////////// anderer Versuch//////
for(int i = 1; i < argc -1 ; ++i)
{
argv[i] = tolower(argv[i]);
printf("\n%s", argv[i]);
}
/////////////////////////////////*/

 for (int i=1; i<argc - 1; ++i)
 {
    if(argv[i] >= 'A')// && argv[i] <= 'Z')
    {
	 argv[i] += 32; 
    }

 }

for(int i = 1; i < argc - 1 ; ++i)
{
  printf("\n%s", argv[i]);
}
}
Aber irgendwas funktioniert nicht
Es kommt immer die Warnung: "comparison between pointer and integer"
Wäre schön wenn ihr mir helfen könntet

Re: Die Worte in einen String umwandeln.

Verfasst: Mo Apr 23, 2012 8:18 pm
von cloidnerux
Ich nehme mal an, dass "char *argv[]" ein array aus Pointern ist und damit ist:

Code: Alles auswählen

argv[i] >= 'A'
ein vergleich eines Pointers mit einem Char.
Du musst hier berücksichtigen, dass du mit char *argv[] ein array aus strings hast und kein array aus chars.

Re: Die Worte in einen String umwandeln.

Verfasst: Mo Apr 23, 2012 8:51 pm
von Nicole
Und was muss ich jetzt machen? Da sitze ich schon ewig dran.

Re: Die Worte in einen String umwandeln.

Verfasst: Mo Apr 23, 2012 9:22 pm
von cloidnerux
Schauen wir uns mal deinen Code an:

Code: Alles auswählen

void worte_linksbuendig_kleinbuchstaben_ersetzten(int argc, char *argv[])
Hier forderst du einen Array aus Strings der anzahl argc an. Das ist wichtig!
Nun zu diesem Code hier:

Code: Alles auswählen

for (int i=1; i<argc - 1; ++i)
{
    if(argv[i] >= 'A')// && argv[i] <= 'Z')
    {
    argv[i] += 32; 
    }

}
Du fängst ab arrayposition 1 an zu zählen, und prüfst dann ob ein Text einem Buchstaben entspricht.
Wie du nun selber merkst, ist ein Text(String) kein Buchstabe. Was du nun machen musst, ist noch einmal durch den Text zu iterieren, damit du die Zeichen hast:

Code: Alles auswählen

for (int i=1; i<argc - 1; ++i)
{
    for(; argv[i] != '\0'; argv[i]++)
    {
        if(*argv[i] >= 'A') && *argv[i] <= 'Z')
        {
            *argv[i] += 32; 
        }
    }
}
Das dürfte dein Problem erstmal beheben, aber du solltest dir auf jeden Fall Pointer anschauen, da du früher oder später nicht drumherum kommst.

MfG cloidnerux.

Re: Die Worte in einen String umwandeln.

Verfasst: Mo Apr 23, 2012 10:37 pm
von Nicole
Danke jetzt startet das Programm zumindest schon mal, nur werden nicht die Großbuchstaben geändert.
Ich habe noch ziemlich Probleme mit den Pointern, ständig wird da was anders gemacht ;)

Re: Die Worte in einen String umwandeln.

Verfasst: Di Apr 24, 2012 10:13 am
von Xin
cloidnerux hat geschrieben:

Code: Alles auswählen

for (int i=1; i<argc - 1; ++i)
{
    for(; argv[i] != '\0'; argv[i]++)
    {
        if(*argv[i] >= 'A') && *argv[i] <= 'Z')
        {
            *argv[i] += 32; 
        }
    }
}
Das dürfte dein Problem erstmal beheben, aber du solltest dir auf jeden Fall Pointer anschauen, da du früher oder später nicht drumherum kommst.
*hüstl*

Du änderst argv, also das Array, das auf die Strings zeigt. Danach wären ja alle Strings quasi weg, weil Du nur noch auf das Nullbyte zeigst - wenn ich das gerade richtig verstehe.

Ich würde mal grob so vorgehen.

Code: Alles auswählen

for (int stringIdx=1; stringIdx<argc - 1; ++i)
{
    char * string = argv[stringIdx];

    for(int pos = 0; string[pos] != '\0'; pos)
    {
        if(string[pos] >= 'A') && string[pos] <= 'Z')
        {
            string[pos] |= 32; 
        }
    }
}

Re: Die Worte in einen String umwandeln.

Verfasst: Mi Apr 25, 2012 2:20 pm
von Nicole
Ich hab das Problem jetzt so lösen können:

Code: Alles auswählen


void worte_linksbuendig_kleinbuchstaben_ersetzten(int argc, char *argv[])
{
	for(int i = 1; i < argc - 1; i++)
	{
  	for(int j = 0; j < (signed)strlen(argv[i]); j++)
		{
			argv[i][j] = tolower(argv[i][j]);		
		}
		printf("%s\n", argv[i]);
	}
}

Dann habe ich noch eine Frage:
Gib es eine vorgefertigte Funktion die die Buchstaben in einen Wort durchgeht und zählt wie oft dieser Buchstabe in allen anderen Wörtern enthalten ist, also im gesamten Array?
Also z.b. auto hund katze
u = 2
a = 2
...

Re: Die Worte in einen String umwandeln.

Verfasst: Mi Apr 25, 2012 2:34 pm
von Xin
Nicole hat geschrieben:Ich hab das Problem jetzt so lösen können:
Sieht optisch erstmal gut aus :-)
Nicole hat geschrieben: Dann habe ich noch eine Frage:
Gib es eine vorgefertigte Funktion die die Buchstaben in einen Wort durchgeht und zählt wie oft dieser Buchstabe in allen anderen Wörtern enthalten ist, also im gesamten Array?
Also z.b. auto hund katze
u = 2
a = 2
...
Nein, gibt es nicht. Das sind typische Übungsaufgaben. ^^

Hier geht's darum, dass Du ein Array zum zählen benutzt. Jedes char-Zeichen hat einen Wert zwischen 0 und 255. Du kannst also auch ein Array nehmen, dass 256 Elemente hat und dann zum Beispiel in array[ 'a' ] die Anzahl der 'a' zählen.