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

C++, zliczanie literek

0 głosów
1,259 wizyt
pytanie zadane 23 września 2018 w C i C++ przez adamus Użytkownik (860 p.)

Witam wszytsko działa ok ale nie moge wpasc jak zrobic jeszcze duze litery, myslalem nad tym zeby stworzyc for'a gdzie bede jechal po calej dlugosci i dodac warunek na duze liczby taki sam jak poniższy.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
	int i,tab[26]={0},dlugosc;
	string zdanie;
	cout << "Napisz zdanie "<<endl;
	getline(cin,zdanie);
	dlugosc=zdanie.length();
	for(i=0;i<26;i++)
		{
			tab[zdanie[i]-'a']++;
		}
	for(i=0;i<26;i++)
		{
			if(tab[i]!=0)
			cout << char(i+'a')<< " wystapilo " << tab[i]<<endl;
		}	
	getch();
	return 0;
}

Jak to ugryźć?

2 odpowiedzi

0 głosów
odpowiedź 23 września 2018 przez Kacper Sas Dyskutant (8,460 p.)
edycja 23 września 2018 przez Kacper Sas
 
Najlepsza

Proponuję stworzyć tablicę dwuwymiarową. Literę sprawdź funkcją isupper(), jeśli jest wielka to odejmij odpowiednią wartość od niej według ascii i inkrementuj odpowiednio tablicę. Jakiś przykład:

int tab[26][2];
getline(cin, napis);

for(int i=0; i<napis.length(); i++) {

    if(napis.at(i) != ' ') {
        if(isupper(napis.at(i))) tab[napis.at(i) - 'A'][1]++;
        else tab[napis.at(i) - 'a'][0]++;
   }
    
}

 

komentarz 23 września 2018 przez adamus Użytkownik (860 p.)
Tez na tym myslałem lecz chciałem bardziej "logicznie" to wymyślic masz jakis pomysl ?
komentarz 23 września 2018 przez mokrowski Mędrzec (158,580 p.)
"Logiczniej" jest zerknąć do <locale> lub <cctypes> i dowiedzieć się do czego służy funkcja std::isalpha(...).

W następnym etapie ew. zainteresować się <algorithm> i dowiedzieć się do czego służy std::cout_if(...).
komentarz 23 września 2018 przez adamus Użytkownik (860 p.)
A mozna by było zrobić tak że bym dodawal odpowiedna liczbe z kodów ascii aby liczylo duże litery ?
komentarz 23 września 2018 przez mokrowski Mędrzec (158,580 p.)
Widzę że nie przeczytałeś lub nie zrozumiałeś dokumentacji. isalpha(...) z <locales>, rozwiązuje szereg pytań typu "czy Ą jest literą i w jakim kodowaniu". Z kolei isalpha(...) z <cctypes> robi właśnie to co ty chcesz robić ręcznie 2 sekcjami if. Dla detekcji "małych liter ascii" i "dużych liter ascii".
+1 głos
odpowiedź 24 września 2018 przez afferu Mądrala (5,220 p.)
edycja 24 września 2018 przez afferu

Zmodyfikowałem troche mój przykład. Teraz używa funkcji std::isalpha, zaleta jest taka, że wyniki są zapisane w mapie. To jakie znaki zostaną uznane za alfabetyczme zależy od ustawień locale programu. Można usunąć if'a z std::isalpha aby zliczyć wszystkie znaki. Jest jeszcze wiele wad tego przykładu.

Żeby skompilować ten przykład trzeba włączyć obsługę c++11.

#include <iostream>
#include <string>
#include <stdint.h>
#include <map>

int main()
{
    std::cout << "Write something: \n";

    std::string user_string{};

    //Pobierz całą linię wejścia z terminala
    std::getline(std::cin, user_string);

    //Mapa unikalnych kluczy i wartości. char jest typem znakowym std::string,
    //każdemu unikalnemu kluczowi char w mapie przyporządkowany jest 32bitowy int bez znaku.
    std::map<char, std::uint32_t> letters_map{};

    //Przeiteruj string, zinkrementuj licznik dla każdego wystąpienia klucza
    for(auto str_char : user_string){
        if(isalpha(str_char)){
           letters_map[str_char]++;
        }
    }

    //Wypisz wynik
    std::cout << "User input: " << user_string << '\n';
    for(auto map_pair : letters_map){
        std::cout << '[' << map_pair.first << "]:" << map_pair.second << '\n';
    }

    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 4,519 wizyt
pytanie zadane 28 listopada 2015 w C i C++ przez agre Użytkownik (550 p.)
0 głosów
2 odpowiedzi 856 wizyt
+2 głosów
1 odpowiedź 885 wizyt

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...