Die Worte in einen String umwandeln.

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Nicole
Beiträge: 5
Registriert: Sa Jan 14, 2012 1:59 am

Die Worte in einen String umwandeln.

Beitrag von Nicole » Mo Apr 23, 2012 8:13 pm

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

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Die Worte in einen String umwandeln.

Beitrag von cloidnerux » Mo Apr 23, 2012 8:18 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Nicole
Beiträge: 5
Registriert: Sa Jan 14, 2012 1:59 am

Re: Die Worte in einen String umwandeln.

Beitrag von Nicole » Mo Apr 23, 2012 8:51 pm

Und was muss ich jetzt machen? Da sitze ich schon ewig dran.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Die Worte in einen String umwandeln.

Beitrag von cloidnerux » Mo Apr 23, 2012 9:22 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Nicole
Beiträge: 5
Registriert: Sa Jan 14, 2012 1:59 am

Re: Die Worte in einen String umwandeln.

Beitrag von Nicole » Mo Apr 23, 2012 10:37 pm

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 ;)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Die Worte in einen String umwandeln.

Beitrag von Xin » Di Apr 24, 2012 10:13 am

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; 
        }
    }
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Nicole
Beiträge: 5
Registriert: Sa Jan 14, 2012 1:59 am

Re: Die Worte in einen String umwandeln.

Beitrag von Nicole » Mi Apr 25, 2012 2:20 pm

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
...

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Die Worte in einen String umwandeln.

Beitrag von Xin » Mi Apr 25, 2012 2:34 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten