Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Strstr()???

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 < [ 2 ]
000
21.08.2003, 10:24 Uhr
~Newbee2003
Gast


Hi,

ich habe ein kleines Problem, ich soll ein Programm schreiben, dass einen Text, in eine Datei schreiben soll. Dieser Text soll nach einem Zeichen durchsucht werden, das der Benutzer eingibt.

Soweit so gut, aber wenn das Zeichen in einem Wort zweimal vorhanden ist, dann wird es mit strstr() nur einmal gezählt. Wie bekomme ich das hin, das er alle Zeichen liest???


C++:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;

void main() {
    
    string text;
    char Zeichen[50];
    int z;

    //Öffnet die Datei new.txt.
    ofstream OutFile("Test.txt");

    //Gibt etwas Text in die Datei aus.
    cout << "Geben Sie Text ein, der in die Datei 'Test.txt' geschrieben werden soll.\n";
    getline(cin, text);
    OutFile << text;
    
    //fragt, nach welchem Zeichen gesucht werden soll
    cout << "Nach welchem Zeichen soll gesucht werden?";
    cin >> Zeichen;


    //Schließe nun die Datei.
    OutFile.close();

    
    //Jetzt öffnen wir eine Datei zum Lesen.
    ifstream InFile;

    //Richte einen Puffer zum Einlesen des Textes
    //ein.
    char p[50];
    InFile.open("Test.txt");
        
         z=0;
    
    //Lies, solange der Input reicht.
    while (!InFile.eof()) {
        //Lies die Datei Wort für Wort ein. Um Wörter zu
        //lesen, brauchen wir nicht aufs Dateiende zu
        //überprüfen.
        InFile >> p;
        cout << p << " ";
        if (strstr(p, Zeichen))
        z = z+1;
    }
    cout << "Das gewaehlte Zeichen befindet sich " << z << " Mal in dem eingegebenen Text\n";

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.08.2003, 10:54 Uhr
0xdeadbeef
Gott
(Operator)


Ich denke, am einfachsten müsste es so gehen:

C++:
z = std::count(std::istream_iterator<char>(InFile), std::istream_iterator<char>(), Zeichen);


Wenn dus unbedingt mit strstr machen willst - strstr liefert einen Pointer auf das erste Zeichen der gefundenen Zeichenkette zurück, sonst NULL. Man könnte also eine Schleife konstruieren, die sich merkt, wohin der von strstr zurückgegebene Zeiger zeigt, den um eins erhöhen und wieder an strstr füttern.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 21.08.2003 um 10:58 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.08.2003, 10:57 Uhr
~Newbee2003
Gast


Brauche ich dafür eine besondere library?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.08.2003, 10:59 Uhr
0xdeadbeef
Gott
(Operator)


Das ist STL, du brauchst nur die entsprechenden Header:

C++:
#include <iostream>
#include <iterator>
#include <algorithm>


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.08.2003, 10:59 Uhr
virtual
Sexiest Bit alive
(Operator)


Nein.
Bearbeitung:
war nicht auf dich bezogen, beefy!

--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 21.08.2003 um 10:59 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.08.2003, 11:00 Uhr
0xdeadbeef
Gott
(Operator)


Ist dir klar, wie Iteratoren funktionieren?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.08.2003, 11:02 Uhr
virtual
Sexiest Bit alive
(Operator)


Meinst Du mich?
--
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
007
21.08.2003, 11:02 Uhr
~Newbee2003
Gast


Ich bekomme ne ganz merkwürdige Fehlermeldung. ???



FILESTR.CPP
cprogram files\microsoft visual studio\vc98\include\algorithm(72) : error C2446: '==' : no conversion from 'const char *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
HC++\eigene\Projekt\Neuer Versuch\FILESTR.CPP(57) : see reference to function template instantiation 'int __cdecl std::count(class std::istream_iterator<char,char,struct std::char_traits<char> >,class std::istream_iterator<char,char,struct
std::char_traits<char> >,const char (&[50])' being compiled
cprogram files\microsoft visual studio\vc98\include\algorithm(72) : error C2040: '==' : 'int' differs in levels of indirection from 'const char [50]'
HC++\eigene\Projekt\Neuer Versuch\FILESTR.CPP(57) : see reference to function template instantiation 'int __cdecl std::count(class std::istream_iterator<char,char,struct std::char_traits<char> >,class std::istream_iterator<char,char,struct
std::char_traits<char> >,const char (&[50])' being compiled
Error executing cl.exe.

FILESTR.exe - 2 error(s), 0 warning(s)

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.08.2003, 11:04 Uhr
virtual
Sexiest Bit alive
(Operator)


Deklaraier mal Zeichen als

C++:
char Zeichen


Und nicht als Array.
--
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
009
21.08.2003, 11:06 Uhr
~Newbee2003
Gast


Schon besser, funktioniert aber jetzt nicht mehr.

error C2664: 'strstr' : cannot convert parameter 2 from 'char' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.

FILESTR.exe - 1 error(s), 0 warning(s)



P.s: Danke, für eure unterstützende Hilfe, di kann ich echt gut gebrauchen. Hoffe wir kriegen das noch richtig hin.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: