Hej, chce napisac program ktory pobiera na wejscie tekst, i zlicza ile kazda litera wystapila razy, potem na wyjsciu w kolejnosci alfabetycznej wypisuje litery ktore wystapily, najpierw liczby male a potem wielkie, nie wiem jak sie za to zabrac wcale, potrzebowalbym pomocy jak ktos bedzie uprzejmy
pomysłów może być wiele.
np. stwórz tablice ze strukturą znak, liczba wystapień: czytaj plik znak po znaku i jeśli znak w tablicy równy temu co przyszedł z pliku to zwiększaj liczbe wystąpień. Na koniec wypisz tablicę. Takie łopatologiczne rozwiązanie.
Czekaj, jak stworzyc tablice ze struktura znak,liczba wystapien ? i jak zrobic jesli jest rowny temu co przyszedl i czego liczbe wystapien zwiekszac i jak to sprawdzac, nic nie rozumiem :(
Inkrementuj w mapie kazde wystapienie, gdzie kluczem jest literka i gotowe. Mapa sama calosc posegreguje
Z telwfonu:
#include <iostream>
#include <cctype>
#include <map>
using namespace std;
int main() {
map<char, unsigned> occurs;
char input;
while(cin>>input){
if(isalpha(input))
occurs[input] += 1;
}
for(auto pair : occurs)
cout << pair.first << ": " << pair.second << endl;
return 0;
}
//edit: nie zauwazylem tagu C, ale niech juz zostanie
Czyli mam stworzyc tyle zmiennych ile liter w alfabecie zeby je inkrementowac ?? I jaka mapa, co za mapa ? Poza tym nie mam pojecia wgl jak sprawdzic jaka litera padla, no dobra wpisana jakas litera ale skad mam wiedziec jaka, poza tym tez jak wczytywac te slowa, *char ? **char ? czy moze tablica charow w petli, nie mam wgl pojecia co zrobic
acha. ciężki temat :P
po pierwsze:
struct Literki
{
char znak;
int ileRazyWystapil
}
pozniej deklarujesz tablicę takich struktur o ilości elementów tak dużej ile jest znaków w alfabecie (razy 2 bo chcesz z podzialem na male i duze).
Wypelniasz pola znak tej struktury literkami w kolejności alfabetycznej :)
otwierasz plik do odczytu (fopen)
odczytujesz znak po znaku (fgetch()) w pętli aż napotkasz koniec pliku.
porównujesz każdy odczytany znak ze znakami w tablicy (też w pętli).
jak trafisz w znak z tablicy zwiększasz ileRazyWystapil i przerywasz tą pętlę (continue)
na koniec wypisujesz strukturę (też w pętli) i masz to co chciałeś.
Rozwiązanie na pewno nie optymalne ale do nauki dobre
porównujesz
procek225 Jak wypelnic taka tablice literkami w kolejnosci alfabetycznej ? I nie chce czytac nic z pliku, slowa maja byc podaje na wejsciu. poza tym jak zadelkarowac tablice struktur ? zrobic tablice na tyle miejsc ile jest w alfabecie i do kazdego miejsca wczytac strukture petla ?
- Zrób sobie tablicę intów na 128 elementów i wyzeruj tą tablicę.
- Czytaj wejście literka po literce. Rzutuj literkę na inta
int numer = (int)literka
i zróbtablica[numer]++
bo zliczasz że literka o takim numerze wystąpiła kolejny raz. - Na koniec zrób sobie dwie pętle for, jedna
for(char znak = 'a'; znak<='z';znak++){}
i druga taka sama z dużymi literkami i wypisuj w tych pętlachznak
oraztablica[(int)znak]
edit:
#include <stdio.h>
int main(void) {
int tablica[128] = {};
int znak;
while((znak=getc(stdin))!=EOF){
tablica[znak]++;
}
for(char znak = 'a'; znak<='z';znak++){
printf("%c %d\n", znak, tablica[znak]);
}
for(char znak = 'A'; znak<='Z';znak++){
printf("%c %d\n", znak, tablica[znak]);
}
return 0;
}
Shalom swietne rozwiazanie ale nie rozumiem jak to ma dzialac int numer = (int)literka i zrób tablica[numer]++ - przeciez kazda literke bedzie rzutowalo na ta sama zmienna chyba , po drugie jak w tamtej petli for bedzie rozroznialo ze a jest mniejsze od z ? i co a++ ? a + 1 ? to dadaje char do inta ? No i najwazniejsze. Jak czytac wejscie literka po literce ? w petli for sie nie da, jak to zrobic ?
Aha jeszcze jedna rzecz, bo ten program wypisuje wszystkie litery w alfabecie i obok liczbe wystapien, da sie zeby wypisywal tylko te litery ktore wystapily a tam gdzie 0 nic ?
To sobie dodaj w pętli warunek żeby nie wypisywać jak jest 0 ? o_O
No ale jak... probowalem ifem ale nie wyszlo :(
for(char znak = 'a'; znak<='z';znak++){
if (tablica[znak]!=0){
printf("%c %d\n", znak, tablica[znak]);
}
}
for(char znak = 'A'; znak<='Z';znak++){
if (tablica[znak] != 0){
printf("%c %d\n", znak, tablica[znak]);
}
}
Cjvq napisał(a):
No ale jak... probowalem ifem ale nie wyszlo :(
To wklej kod tej próby, a nie czekasz na gotowca.
Nie odpowiadajcie koledze bo to jest troll z tora.