zliczanie wystąpień poszczególnych liter

luke877
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 29 paź 2007, o 19:00
Płeć: Mężczyzna
Lokalizacja: Rybnik
Podziękował: 50 razy

zliczanie wystąpień poszczególnych liter

Post autor: luke877 »

Mam napisać program, który tworzy model probabilistyczny dla pliku tekstowego ASCII (26 liter) zliczający liczbę wystąpień poszczególnych liter.
abc666

zliczanie wystąpień poszczególnych liter

Post autor: abc666 »

I jaki masz problem, tak konkretnie?
luke877
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 29 paź 2007, o 19:00
Płeć: Mężczyzna
Lokalizacja: Rybnik
Podziękował: 50 razy

zliczanie wystąpień poszczególnych liter

Post autor: luke877 »

Konkretnie to z calym tym zadaniem, bo nigdy nie programowalem a musze to zrobic. Dlatego w visual basic bo ponoc jest najprosciej...
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

zliczanie wystąpień poszczególnych liter

Post autor: Szemek »

luke877 pisze:Dlatego w visual basic bo ponoc jest najprosciej...
Czyli równie dobrze może być inny język programowania: Pascal, C/C++, C# etc.
luke877
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 29 paź 2007, o 19:00
Płeć: Mężczyzna
Lokalizacja: Rybnik
Podziękował: 50 razy

zliczanie wystąpień poszczególnych liter

Post autor: luke877 »

Tak masz racje. Rownie dobrze moze byc kazdy inny jezyk.
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

zliczanie wystąpień poszczególnych liter

Post autor: matshadow »

Tworzysz hasha/tablicę asocjacyjną/mapę (w C++). Teraz po prostu jedziesz w pętli: dla każdego znaku z pliku hash[znak]++;

W perlu:

Kod: Zaznacz cały

open ("moj", "<plikk.txt");
%hash=();
while(<moj>)
{
	chomp;
	@litery=split(', $_);
	foreach $lit(@litery)
	{
		$hash{$lit}++ if($lit=~/[A-Z]/i);
	}
}
close moj;
foreach $litera(sort keys %hash)
{
	print "$litera -> $hash{$litera}
";
}
luke877
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 29 paź 2007, o 19:00
Płeć: Mężczyzna
Lokalizacja: Rybnik
Podziękował: 50 razy

zliczanie wystąpień poszczególnych liter

Post autor: luke877 »

Perla wogole nie kojarze :/ Jak by to wygladalo w c++?
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

zliczanie wystąpień poszczególnych liter

Post autor: soku11 »

Można np. tak:

Kod: Zaznacz cały

const unsigned char LOWER=' ';
const unsigned char UPPER='~';
const unsigned int CHARS=UPPER-LOWER+1;

void countChars(std::ifstream& file,int chars[CHARS])
{
  unsigned char c=0;

  while(!file.eof())
  {
    c=0;
    file>>c;
    if(c>=LOWER && c<=UPPER)
      ++chars[c-' '];
  }
}

Pozdrawiam.
luke877
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 29 paź 2007, o 19:00
Płeć: Mężczyzna
Lokalizacja: Rybnik
Podziękował: 50 razy

zliczanie wystąpień poszczególnych liter

Post autor: luke877 »

Nie dziala mi ten program
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

zliczanie wystąpień poszczególnych liter

Post autor: soku11 »

To nie jest cały program, tylko funkcja do zliczania znaków. Trzeba dodać nagłówki (iostream,fstream) i funkcję main, która tworzy zmienne, otwiera plik i wywołuje funkcję.

Pozdrawiam.
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

zliczanie wystąpień poszczególnych liter

Post autor: matshadow »

W C++ z mapą

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <map>
using namespace std;
map<char, int>moja;
map<char,int>::iterator it1;
int main()
{
    ifstream plik;
    plik.open("plikk.txt");
    while(!plik.eof())
    {
        string s;
        plik >>s;
        for(int i=0; i<s.size(); i++)
            moja[s[i]]++;
    }
    plik.close();
    for(it1=moja.begin(); it1!=moja.end(); it1++)
        cout<<it1->first<<<<it1->second<<endl;
    system("pause");
    return 0;
}
luke877
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 29 paź 2007, o 19:00
Płeć: Mężczyzna
Lokalizacja: Rybnik
Podziękował: 50 razy

zliczanie wystąpień poszczególnych liter

Post autor: luke877 »

matshadow sprawdzales to? Ten kod tez mi nie chodzi...
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

zliczanie wystąpień poszczególnych liter

Post autor: soku11 »

@luke877:
Kod jest ok. Po prostu ty nie potrafisz nawet użyć gotowca

Pozdrawiam.
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

zliczanie wystąpień poszczególnych liter

Post autor: Szemek »

soku11 pisze:@luke877:
Kod jest ok. Po prostu ty nie potrafisz nawet użyć gotowca

Pozdrawiam.
soku11,
luke877 napisał, że nie ma pojęcia o programowaniu. Cóż poradzić...
Jak widać, gotowiec to kiepska forma pomocy.

luke877, dopisz jeszcze #include<string>
ODPOWIEDZ