Pereiti prie turinio

c++ simblolių paieška


Rekomenduojami pranešimai

štai kodas:

 

#include <iostream>
#include <fstream>

const char CDfv[] = "duomenys.txt";
const char CRfv[] = "rezultatai.txt";
const int Cmax = 100;
int kiek( char x);
void spausdinti();

using namespace std;

int main()
{

   spausdinti();
   return 0;
}

int kiek( char x){
   int  p = 0;
   char a;
   ifstream fd(CDfv);
       while(!fd.eof()){
           fd.get(a);
           if(!fd.eof() && (x == a)) p++;
       }
       fd.close();
       return p;
}

void spausdinti(){
   ofstream fr(CRfv);
       cout  << "1" << " " << kiek('1') <<endl;
       cout  << "2" << " " << kiek('2') <<endl;
       cout  << "3" << " " << kiek('3') <<endl;
       cout  << "4"<< " " << kiek('4') <<endl;
       cout  << "5" << " " << kiek('5') <<endl;
       cout  << "6"<< " " << kiek('6') <<endl;
       cout  << "7"<< " " << kiek('7') <<endl;
       cout  << "8"<< " " << kiek('8') <<endl;
       cout  << "9"<< " " << kiek('9') <<endl;

   fr.close();
}

 

 

ar galima kaip nors pakeisti funkcijoje spausdinti? kad būtų kažkas panašaus.

 

void spausdinti(){
   for(int x=1; x <= 9; x++) 
       cout  << x << " " << kiek(x) <<endl;

   fr.close();
}

bet taip nesigauna, nes toje vietoje būtina parasyt simboį kabutese. tiesiog noriu sutrumpint koda, kad nereiktu tiek daug rašyt.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

string s("123456789irKitiSimboliaiKuriuosReikiaRasti");

for(int i = 0; i < s.length(); i++)
{
   fr << s[i] << ' ' << kiek(s[i]) << endl;
} 

 

jei man reikia rasti visus simbolius, skaičius, tarpus ir raides, tai čia yra geriausias būdas tam apskaičiuot?

string s("123456789");

 

Niekada neteko daryti iš int į char, bet čia yra kažkiek info: http://stackoverflow.com/questions/4629050/convert-an-int-to-ascii-character

 

 

dėkui, radau.

 

for(int x = 1; x <=9; x++){
       cout << kieksk('0' +x) <<endl;
  }

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jei reikia suskaičiuoti visokius simbolius (ko prieš tai neparašei):

string s;
//...
//nusiskaitai į s visą tekstą
//...

const int N = 256;
int sk[N];
memset(sk, 0, N*sizeof(int));

for(int i = 0; i < s.length(); i++)
{
   sk[int(s[i])]++;
}

for(int i = 0; i < N; i++)
{
   if(sk[i])
   {
       cout << char(i) << ' ' << sk[i] << endl;
   }
}

 

Padidinus N bus galima surasti ir rečiau naudojamų ženklų (kurie turbūt užlauštų mano parašyta kodą), bet įprastiniai turėtų tilpti ir į tiek. Jei nori rasti bet kokius ženklus, protingiausia būtų naudotis map'u.

 

Be to, savo pradiniam kode iš naujo skaitai failą kiekvieną kartą paleisdamas funkciją kiek(). Skaitymas yra itin daug laiko reikalaujanti operacija, lyginant su duomenų paėmimu iš RAM, todėl reikia stengtis skaityti kiek įmanoma mažiau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jei reikia suskaičiuoti visokius simbolius (ko prieš tai neparašei):

string s;
//...
//nusiskaitai į s visą tekstą
//...

const int N = 256;
int sk[N];
memset(sk, 0, N*sizeof(int));

for(int i = 0; i < s.length(); i++)
{
   sk[int(s[i])]++;
}

for(int i = 0; i < N; i++)
{
   if(sk[i])
   {
       cout << char(i) << ' ' << sk[i] << endl;
   }
}

 

Padidinus N bus galima surasti ir rečiau naudojamų ženklų (kurie turbūt užlauštų mano parašyta kodą), bet įprastiniai turėtų tilpti ir į tiek. Jei nori rasti bet kokius ženklus, protingiausia būtų naudotis map'u.

 

Be to, savo pradiniam kode iš naujo skaitai failą kiekvieną kartą paleisdamas funkciją kiek(). Skaitymas yra itin daug laiko reikalaujanti operacija, lyginant su duomenų paėmimu iš RAM, todėl reikia stengtis skaityti kiek įmanoma mažiau.

 

man reikia rasti visus atskirai :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

post-44934-0-83090400-1363428400_thumb.jpg

while(!D.eof()) {
char x; 
getch(x);
if (tolower(x) >= 'a' && tolower(x) <= 'z')
    raidziusuma++;
else if (x >= '0' && x <= '9')
    skaiciusuma++;
else if (x == ' ')
    tarpusuma++;
else kitusimboliusuma++;
}

 

Kodo nebandziau, bet manau, kad sitam uzdaviniui kodas turetu tikt, arba bent jau su patobulinimais kazkokiais.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...