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

Zliczacz liter SPOJ

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
930 wizyt
pytanie zadane 2 października 2018 w SPOJ przez krawiecki Początkujący (490 p.)
edycja 2 października 2018 przez krawiecki

Nie rozumiem z jakiego powodu program wypisuje mi dla przykładowych danych na początku 
0 1
Potem wypisuje prawidłowo ale nie mogę znaleźć błędu. Może też dlatego, że dopiero zacząłem używać map a ostatnią pętle przepisałem z jakiegoś tutoriala. Dodatkowe pytanie, czy da się jakoś inaczej wypisać wszystkie elementy mapy, ponieważ nie do końca rozumiem ten zapis w ostatniej pętli.

https://pl.spoj.com/problems/JZLICZ/
 

#include <iostream>
#include <vector>
#include <map>
using namespace std;


int main(int argc, const char * argv[])
{
    int n;
    
    cin >> n;
    string temp;

    vector<string> dane;
    map<char, int> liczniki;
    
    while (cin >> temp)
    {
        dane.emplace_back(temp);
    }
    
    for (int i=0; i<dane.size(); i++) {
        
        for (int j=0; j<dane[i].size(); j++) {
            
            liczniki[dane[i][j]]++;
        }
    }
    
    for (map<char , int>::iterator it = liczniki.begin(); it !=liczniki.end(); it++) {
        cout << it->first << " " << it->second << endl;
    }
    return 0;
}

 

komentarz 2 października 2018 przez niezalogowany
Jakiś link do zadania? Może ustawisz chociaż raz na kilka tematów dobrą kategorię? ;)
komentarz 2 października 2018 przez krawiecki Początkujący (490 p.)
Za dużo ode mnie wymagasz ;)
komentarz 2 października 2018 przez niezalogowany
Tak lepiej :P

2 odpowiedzi

0 głosów
odpowiedź 2 października 2018 przez adamus Użytkownik (860 p.)
Możesz to zadanie zrobic w nastepujący sposob jesli chodzi o zliczanie literek jedziesz forem po duzych i malych robisz warunek ze jakies tab[[txt-1]-'a']++;

Nastepnie wyswietlasz char(i+'a') wystapilo... <<tab[i] pamietaj tylko o warunku ktory wyswietli ci wszytskie litery alfabetu.
komentarz 2 października 2018 przez adamus Użytkownik (860 p.)

Przykładowo 

	dlugosc=zdanie.length();
	for(i=0;i<dlugosc;i++)
		{
			tab[zdanie[i]-'a']++;
		}

 

0 głosów
odpowiedź 2 października 2018 przez niezalogowany
edycja 2 października 2018

Nie ma sensu używać vector. Na wyjściu mają być najpierw ilości małych liter, a dopiero później duże. W Twoim kodzie klucze mapy są posortowane wg kodów tablicy ASCII. Możesz znaleźć położenie małych liter i wypisać je w pierwszej kolejności:

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main(int argc, const char * argv[])
{
	int n;
	cin >> n;

	string temp;
	map<char, int> liczniki;
	while (cin >> temp)
	{
		for (int i = 0; i<temp.size(); i++) 
		{
			liczniki[temp[i]]++;
		}
	}

	auto lowerCasePos = liczniki.lower_bound('a');
	
	for (map<char, int>::iterator it = lowerCasePos; it != liczniki.end(); it++) {
		cout << it->first << " " << it->second << endl;
	}
	for (map<char, int>::iterator it = liczniki.begin(); it != lowerCasePos; it++) {
		cout << it->first << " " << it->second << endl;
	}
	return 0;
}

Podobne pytania

0 głosów
1 odpowiedź 1,850 wizyt
pytanie zadane 29 lipca 2016 w C i C++ przez KiTroN Początkujący (300 p.)
0 głosów
1 odpowiedź 639 wizyt
pytanie zadane 24 czerwca 2020 w C i C++ przez dernis Nowicjusz (120 p.)
0 głosów
1 odpowiedź 294 wizyt
pytanie zadane 14 czerwca 2022 w C i C++ przez polandonion Dyskutant (7,630 p.)

93,440 zapytań

142,431 odpowiedzi

322,679 komentarzy

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

...