Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » string auslesen fehler?

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
30.04.2003, 11:27 Uhr
Re-Animator




C++:

#include <stdio.h>

int main(void)

{

int       a = 0;
int       e = 0;
int       i = 0;
int       o = 0;
int       u = 0;

int leerz   = 0;
int zaehler = 0;


char eingabe [100];                                    

prinft ("Bitte geben sie einen String ein:");

gets (eingabe);                                        
for (zaehler=0; eingabe [zaehler] != '\0'; zaehler++)  

{

if ((eingabe[zaehler] == ('a')) || (eingabe [zaehler] == ('A'*)) {a++;}
else if ((eingabe [zaehler] == ('e')) || (eingabe[]zaehler] == ('E')){e++}
else if ((eingabe [zaehler] == ('i')) || (eingabe[]zaehler] == ('I')){i++}
else if ((eingabe [zaehler] == ('o')) || (eingabe[]zaehler] == ('O'))(o++)
else if ((eingabe [zaehler] == ('u')) || (eingabe[]zaehler] == ('U'))(u++)
else if ((eingabe [zaehler] == ('leerz')) || (eingabe[]zaehler]

}

prinft("%s\n" , eingabe);

prinft("Anzahl A bzw. a: %i\n", a); bis leerz

return 0;

}

Wie zähle ich das leerzeichen?

Linker Fehlermeldungen:
In function `main':
parse error before `)'

character constant too long
parse error before `leerz'









 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.04.2003, 11:51 Uhr
virtual
Sexiest Bit alive
(Operator)


Nebenbei: Iste eine Compiler Meldung und keien Linkermeldung...

Dann solltest Du fgets an Stelle von gets verwenden, weil ersteres sicherer ist.

Der If-Block sieht krank aus. Wie wärs mit:

C++:
if ((eingabe[zaehler] == 'a' || eingabe [zaehler] == 'A')  {a++;}
else if (eingabe [zaehler] == 'e' || eingabe[zaehler] == 'E'){e++;}
else if (eingabe [zaehler] == 'i' || eingabe[zaehler] == 'I') {i++;}
else if (eingabe [zaehler] == 'o' || eingabe[zaehler] == 'O') {o++;}
else if (eingabe [zaehler] == 'u' || eingabe[zaehler] == 'U') {u++;}
else if (eingabe [zaehler] == ' ') { leerz++; }


Von der Struktur war das if ja richtig, abner guck Dir mal den Unterschied zu Deinem Original an: jede Menge Syntaxfehler.
Alternativ kann man auch switch verwenden.

Den parse Error kann man gut nachvollziehen, finde ich, weil Du (), {} machmal vertauscht hast.
Dann hast Du 'leerz' geschrieben, das erklärt die Meldung "character constant too long". Seis drum, war eh nicht das, was du wolltest.
Das letzte printf ist auch Fehlerhaft, nach dem Semikolon solle es ein Kommentarzeichen geben, bevor es mit "bis leerz" weitergeht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 30.04.2003 um 11:52 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.04.2003, 12:15 Uhr
Re-Animator



Vielen dank, die Klammern hab ich glatt übersehen.

hab mich noch an einer anderen Möglichkeit mit case Zweigen und break versucht. Läuft soweit auch wunderbar.


C++:

............

break;
    case 'U':
    case 'u': v[4]++;
    break;
    case 'H':
    case 'h': v[leerz]++;
   }
  printf("\nH„ufigkeiten der Vokale:\n\n");
  printf("a\te\ti\to\tu\tleerz\n\n");
  printf("%d\t%d\t%d\t%d\t%d\t%d", v[0], v[1], v[2], v[3], v[4], v[5]);

}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.04.2003, 13:04 Uhr
virtual
Sexiest Bit alive
(Operator)


Spaßeshalber mal ein verwandtes Progrämmchen in C++:


C++:
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <cctype>

int main()
{
    std::map<char, int> freq;
    std::string str;

    std::cout<<"Bitte bel. Text eingeben: "<<std::flush;
    std::getline(std::cin, str);

    for(std::string::const_iterator i=str.begin(); i!=str.end(); ++i)
    {
        if (isspace(*i) || isalpha(*i)) // Alternativ: Nach Vokalen filtern!
            freq[tolower(*i)]++;
    }

    std::cout<<"Abs. Buchstabenhäufigkeiten:"<<std::endl;
    for(std::map<char,int>::const_iterator i=freq.begin(); i!=freq.end(); ++i)
    {
        std::cout<<'\''<<i->first<<"\' => "<<i->second<<std::endl;
    }
}


Anm.: der Visual C hat damit Probleme, da muß man erst irgendso ein Flag setzen, weil er sonst nicht mit Standard C++ klarkommt (doppelte Deklaration von i)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.04.2003, 16:44 Uhr
Re-Animator



...jetzt springt er plötzlich nach auslesung von a raus
was genau ist falsch in der letzten printf Zeile?



C++:

printf("Anzahl A bzw. a: %i\n", a);  (leerz);    /*springt raus bei a/*

printf("Anzahl A bzw. a: %i\n", a); bis leerz




Welches Kommentarzeichen wird benötigt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.04.2003, 18:12 Uhr
virtual
Sexiest Bit alive
(Operator)


Oh je :

C++:
printf("Anzahl A bzw. a: %i\n", a); (leerz);    /*springt raus bei a[b]*/[/b]



Das Kommentar Ende ist Falsch!
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
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: