Forum » Programiranje » Preverjanje besed v datoteki
Preverjanje besed v datoteki
djv ::
A ve kdo, kako bi to naredil v C++-u.
Namreč...jaz imam eno vhodno datototeko (npr. vhod.txt), kjer je neko besedilo. Zdaj pa bi jaz vpisal neko besedo in program bi mi vse besede, ki so iste vpisani, prepisal v izhodno datoteko (izhod.txt).
Problem je pravzapral samo pri preverjanu, ali je vpisana beseda enaka kateri v datoteki. Sam sem to naredil z while zanko ki gre dokler ne naleti na znak 'presledek', ali pa na EOF (end of file). Kako pa naj sedaj, ko sem prišel do presledka to besedo preverim. A ve kdo?
Namreč...jaz imam eno vhodno datototeko (npr. vhod.txt), kjer je neko besedilo. Zdaj pa bi jaz vpisal neko besedo in program bi mi vse besede, ki so iste vpisani, prepisal v izhodno datoteko (izhod.txt).
Problem je pravzapral samo pri preverjanu, ali je vpisana beseda enaka kateri v datoteki. Sam sem to naredil z while zanko ki gre dokler ne naleti na znak 'presledek', ali pa na EOF (end of file). Kako pa naj sedaj, ko sem prišel do presledka to besedo preverim. A ve kdo?
- spremenilo: djv ()
wintermute ::
Z neznosno lahkostjo STLja bi cel problem resil takole:
 
 
Sicer pa C-style stringe primerjas z uporabo strcmp funkcije (header string.h), npr:
 
 
HTH.
#include <string>
#include <iterator> // istream_iterator, ostream_iterator
#include <fstream> // ifstream, ofstream
#include <functional> // bind2nd, equal_to
using namespace std;
template<class InIter, class OutIter, class Predicate>
OutIter copy_if(InIter first, InIter last, OutIter out, Predicate pred)
{
while (first != last)
{
if (pred(*first)) *out++ = *first;
++first;
}
return out;
}
int main()
{
string keyword = "krneki";
ifstream input("input.txt");
ofstream output("output.txt");
istream_iterator<string> ii(input), eof;
ostream_iterator<string> oi(output, "\n");
copy_if(ii, eof, oi, bind2nd(equal_to<string>(), keyword));
}
 
 
Sicer pa C-style stringe primerjas z uporabo strcmp funkcije (header string.h), npr:
char* beseda1;
char* beseda2;
// od nekje zdaj dobis zgornji besedi
int ret = strcmp(beseda1, beseda2);
if (ret == 0) cout << "besedi sta enaki\n";
else if (ret < 0) cout << "beseda1 je po abecedi pred besedo2\n";
else cout << "beseda1 je po abecedi za besedo2";
Opomba: gre za case-sensitive primerjavo.
 
 
HTH.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Pomoč pri JaviOddelek: Programiranje | 2566 (2172) | mgermo |
» | branje iz datoteke c#Oddelek: Programiranje | 1633 (1362) | darkolord |
» | [C++] Kopiranje char arraya v drug char arrayOddelek: Programiranje | 1264 (1135) | win64 |
» | [JAVA] zaustavitev niti (threadov)Oddelek: Programiranje | 3163 (3163) | morbo |
» | c++ datotekeOddelek: Programiranje | 4028 (3517) | Vesoljc |