• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zliczanie polskich znaków z pliku tekstowego.

Object Storage Arubacloud
+1 głos
508 wizyt
pytanie zadane 1 czerwca 2021 w C i C++ przez drequ Nowicjusz (130 p.)

Napisz program, który wczyta dane z pliku tekstowego, a następnie zliczy wystąpienia liter pełnego polskiego alfabetu i zapisze wyniki do pliku tekstowego. O ile jeśli chodzi o alfabet łaciński nie miałem najmniejszego problemu, to zastanawiam się jak zmodyfikować kod, aby zliczało mi również polskie znaki.

#include <iostream>
#include <fstream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
    int i;
    string napis;
    char ch;
    int Liczniki[35];
    for(i=0;i<35;i++)
    {
        Liczniki[i]=0;
    }
    ifstream wejscie("zliczanie.txt");
    while(!wejscie.eof())
    {
        getline(wejscie,napis);
        for(i=0;i<napis.size();i++)
        {
            ch=toupper(napis[i]);
            if (ch>='A' && ch<='Z') Liczniki[ch-'A']++;
        }
    }
    wejscie.close();
    for(i=0;i<35;i++)
    {
        if(Liczniki[i]>0)
        {
            cout<<char(i+'A')<<" - ";
            cout<<Liczniki[i]<<endl;
        }
    }
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 1 czerwca 2021 przez j23 Mędrzec (194,920 p.)
edycja 1 czerwca 2021 przez j23

Daj na początku programu (przy założeniu, że używasz Windowsa, a plik jest zapisany w kodowaniu Windows-1250):

setlocale(LC_CTYPE, ".ACP");

a litery sprawdzaj funkcją isalpha.

 Liczniki[ch-'A']++;

W przypadku polskich liter takie indeksowanie nie przejdzie, ponieważ znaki diakrytyczne mają kody powyżej 127, co w przypadku typu char, który z reguły jest typem ze znakiem, może dać indeksy ujemne. Użyj std::map lub nawet tablicy int[256] (pamiętaj o rzutowaniu char na unsigned char).

 

 while(!wejscie.eof())
    {
        getline(wejscie,napis);

Nie nauczą się...

while(getline(wejscie,napis)) {
   ...
}

 

komentarz 1 czerwca 2021 przez NewEraOfPeace Gaduła (4,790 p.)

Typ `char` nie jest typem ze znakiem. Standard tego nie gwarantuje.

 

komentarz 1 czerwca 2021 przez j23 Mędrzec (194,920 p.)
Ha, wiedziałem, że się ktoś do tego przyczepi :P

Poprawiłem nieco to zdanie.

Podobne pytania

+1 głos
2 odpowiedzi 371 wizyt
0 głosów
0 odpowiedzi 673 wizyt
pytanie zadane 1 sierpnia 2018 w PHP przez lukii1717 Nowicjusz (140 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...