string tekst="w Szczebrzeszynie chrząszcz brzmi w trzcinie i Szczebrzeszyn z tego słynie";
analiza_tekstu(tekst);
return 0;
}
Wyjaśnienie:
Takie uwagi tylko:
1. U mnie polskie znaki nie dzałają i uważam, że nie powinno się w nich w ogóle korzystać, ale u Ciebie może działać
2. Kod jest po polsku czego również normalnie bym nie zrobił, ale taki był w poleceniu
3. skorzystałem z using namespace std z którego normalnie bym nie skorzystał, ale tak było w zadaniu
4. użyłem structured bindings przy wyświetlaniu zawartości mapy, dlatego upewnij się, że masz wersję c++17 lub nowszą. Jak nie masz, to pamiętaj, że zawartość mapy to pary (klucz, wartość) i jak chcesz wyświetlać to inaczej, to musisz się wtedy odwoływać do pary i pisać .first i .second co mega traci na czytelności moim (i nie tylko moim) zdaniem
1 votes Thanks 1
0AB
Nie, ten (taki) program nie działa dla znaków spoza ASCII.
REGNAD
I wypowiedziałem się co sądzę o obsłudze polskich znaków
1. i 2. załącznik zawierają kod źródłowy. Rozbiłam na dwie części aby można było minimalnie łatwiej czytać. 3. załącznik zawiera wynik wykonania.
Tak jak jest napisane działa pod replit i używając g++ pod Linuxem. Nie działa używając Code::Blocks, Dev-C++ i Visual Studio 2019.
cpp.sh, OnlineGDB, jak i Programiz jeszcze nie obsługują polskich liter w nazwach zmiennych oraz funkcji, ale program na nich by działał. W 4. załączniku podałam jak musiałaby wyglądać funkcja analiza_tekstu() gdyby w nazwach identyfikatorów nie używać polskich liter. A w 5. załączniku wynik wykonania na platformie Progamiz.
Wyjaśnienie
Niestety nie napisałeś jakiej używasz platformy (programu, środowiska) do pisania w C++. (A przy pisaniu akurat tego programu bardzo by się ta wiedza przydała...)
Nie napisałeś też co było na ostatnich lekcjach. Zadania zwykle właśnie się rozwiązuje używając materiału z ostatnich lekcji...
Istotna uwaga
Ustawienie LC_CTYPE nie ma wpływu na działanie programu. Natomiast ma wpływ ustawienie LC_COLLATE!
Umieściłam na końcu analiza_tekstu() wydruk informacji o środowisku. Jeżeli jest C (tak jak na zrzucie ekranu), to jest źle. Powinno być
Locale is: LC_COLLATE=pl_PL
lub coś podobnego np. pl_PL.UTF-8.
Co znaczy źle? To znaczy, że polecenie find odpowiedzialne za wyszukiwanie nie odróżnia małych i dużych liter poza ASCII.
Teraz nie mam czasu pisać długiego komentarza. Może wieczorem lub jutro. Stwórz nowe pytanie, jeśli interesują Ciebie objaśnienia.
Odpowiedź:
#include <iostream>
#include <map>
#include <locale>
using namespace std;
void analiza_tekstu(const string &tekst){
map<char, int> mapaWystapienZnakow;
for(const char znak : tekst){
mapaWystapienZnakow[znak]++;
}
for(const auto &[znak, liczbaWystapien] : mapaWystapienZnakow){
if(liczbaWystapien == 1){
cout << znak << " - " << liczbaWystapien << " raz" << std::endl;
}else{
cout << znak << " - " << liczbaWystapien << " razy" << std::endl;
}
}
}
int main() {
setlocale(LC_CTYPE, "Polish");
string tekst="w Szczebrzeszynie chrząszcz brzmi w trzcinie i Szczebrzeszyn z tego słynie";
analiza_tekstu(tekst);
return 0;
}
Wyjaśnienie:
Takie uwagi tylko:
1. U mnie polskie znaki nie dzałają i uważam, że nie powinno się w nich w ogóle korzystać, ale u Ciebie może działać
2. Kod jest po polsku czego również normalnie bym nie zrobił, ale taki był w poleceniu
3. skorzystałem z using namespace std z którego normalnie bym nie skorzystał, ale tak było w zadaniu
4. użyłem structured bindings przy wyświetlaniu zawartości mapy, dlatego upewnij się, że masz wersję c++17 lub nowszą. Jak nie masz, to pamiętaj, że zawartość mapy to pary (klucz, wartość) i jak chcesz wyświetlać to inaczej, to musisz się wtedy odwoływać do pary i pisać .first i .second co mega traci na czytelności moim (i nie tylko moim) zdaniem
Odpowiedź
1. i 2. załącznik zawierają kod źródłowy. Rozbiłam na dwie części aby można było minimalnie łatwiej czytać. 3. załącznik zawiera wynik wykonania.
Tak jak jest napisane działa pod replit i używając g++ pod Linuxem. Nie działa używając Code::Blocks, Dev-C++ i Visual Studio 2019.
cpp.sh, OnlineGDB, jak i Programiz jeszcze nie obsługują polskich liter w nazwach zmiennych oraz funkcji, ale program na nich by działał. W 4. załączniku podałam jak musiałaby wyglądać funkcja analiza_tekstu() gdyby w nazwach identyfikatorów nie używać polskich liter. A w 5. załączniku wynik wykonania na platformie Progamiz.
Wyjaśnienie
Niestety nie napisałeś jakiej używasz platformy (programu, środowiska) do pisania w C++. (A przy pisaniu akurat tego programu bardzo by się ta wiedza przydała...)
Nie napisałeś też co było na ostatnich lekcjach. Zadania zwykle właśnie się rozwiązuje używając materiału z ostatnich lekcji...
Istotna uwaga
Ustawienie LC_CTYPE nie ma wpływu na działanie programu. Natomiast ma wpływ ustawienie LC_COLLATE!
Umieściłam na końcu analiza_tekstu() wydruk informacji o środowisku. Jeżeli jest C (tak jak na zrzucie ekranu), to jest źle. Powinno być
Locale is: LC_COLLATE=pl_PL
lub coś podobnego np. pl_PL.UTF-8.
Co znaczy źle? To znaczy, że polecenie find odpowiedzialne za wyszukiwanie nie odróżnia małych i dużych liter poza ASCII.
Teraz nie mam czasu pisać długiego komentarza. Może wieczorem lub jutro. Stwórz nowe pytanie, jeśli interesują Ciebie objaśnienia.