[ trillian fextell @ 05.06.2005. 16:28 ] @
Ciao!
Imam jedan problem.Profa nam mi je dao sljedeci zadatak iz osnova c++ programiranja (iskreno,ne znamo bas programirati pa trazimo pomoc ekipe koji su zavrsili inf.fax ili slicno da nam pomognu u tome...sramota,znam)

23. Napisite program koji ce ucitati proizvoljnu tekstualnu datoteku te
abecednim redom ispisati sva slova koja se javljaju u svakoj od rijeci. Na
primjer, ako su parametri za upis IviCa, MarICA vjestica, program treba
ispisati a c i.

Okej.Program sam "napravio"...ali stalno se pojavljuju 3 erora na 20,22 i 25 liniji koji glase
:Could not find a match for 'strlen(string)' in function main()

Hvala na pomoci!!!!!

Ovo je program:
Code:

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;

int main() {
    string red,text,zaIspis,datoteka;
    int n,flag;
    cout<<"Upisi ime datoteke:";
    cin>>datoteka;
    ifstream iFile ("datoteka.txt");
    if(!iFile) {
        cout<<"Greska kod otvaranja datoteke"<<endl;
                      return -1;
                   }
    while (!iFile.eof()) {
            iFile>>red;
            text=text+red;
                      }
    for (int i=0;i<strlen(text);i++) {
            n=0;
            for (int j=0;j<strlen(text);i++) {
                    if (text[i]==text[j]) { 
                        n=n+1;
                        for (int k=0;k<strlen(zaIspis);k++) {
                                if (text[i]==zaIspis[k]) 
                                n=1;
                                                }
                                  } 
                                }
                         
            if (n>1)zaIspis=zaIspis+text[i];
                       }
    cout<<zaIspis;
    return 0;
    }


[Ovu poruku je menjao passenger dana 05.06.2005. u 23:11 GMT+1]
[ Marko Stankovic @ 05.06.2005. 18:22 ] @
Problem je u tome sto koristis funkciju koja kao argument ocekuje char* a ne promenljivu tipa string. strlen je funkcija koja se koristi u c-u, u c++ kad koristis klasu string imas metodu size() koja vraca velicinu stringa. Znaci for petlje treba da izgledaju ovako:

Code:

 ...

 for (int i=0;i<text.size();i++) ...



naravno ovo prepravi svuda gde si pozivao strlen()

P.S. i sledeci put kada ostavljas kod na forumu stavi ga izmedju tagova [ code ] [ /code ] , naravno bez razmaka izmedju zagrada.
[ trillian fextell @ 05.06.2005. 23:41 ] @
E,hvala puno!!!! :-*

Kompajliram ja program i kad upisem datoteka.txt da je otvori program...meni se on zalomi,dojde poruka o nekakvoj greski,stisnem ok i program se ugasi.U vizualnom Borlandovom kompajleru mi oznacio sljedecu liniju da nesto ne valja...gubim se...pa ako netko skuzi sta tu ne valja...hvala jos jednom.

Code:

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;

int main() {
string red,text,zaIspis,datoteka;
int n,flag;
cout<<"Upisi ime datoteke:";
cin>>datoteka;
ifstream iFile ("datoteka.txt");
if(!iFile) {
cout<<"Greska kod otvaranja datoteke"<<endl;
return -1;
}
while (!iFile.eof()) {
iFile>>red;
text=text+red;
}
for (int i=0;i<text.size();i++) {
n=0;
for (int j=0;j<text.size();i++) {
if (text[i]==text[j]) {  //OVDJE GA KOCI!!!
n=n+1;
for (int k=0;k<zaIspis.size();k++) {
if (text[i]==zaIspis[k])
n=1;
}
}
}

if (n>1)zaIspis=zaIspis+text[i];
}
cout<<zaIspis;
return 0;
}


[ manman @ 06.06.2005. 00:45 ] @
Greska u :
Code:
 for (int j=0;j<text.size();[red]i++[/red]) {
if (text[i]==text[j]) {  //OVDJE GA KOCI!!! 


Znaci treba umesto i++, j++ jer je ta petlja za promenjivu j def.
Ali mislim i da pored ovoga, resenje nije dobro.
Drugo, salji "uvuceni code" tj, kao u prvoj poruci radi bolje preglednosti, a ne poravnat sa leve strane.