Ukladanie outputu wedle kolejnosci w alfabecie.

0

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

0

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.

0

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 :(

0

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;
}

http://ideone.com/VPKWw2

//edit: nie zauwazylem tagu C, ale niech juz zostanie

0

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

0

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

0

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 ?

2

@Cjvq

  1. Zrób sobie tablicę intów na 128 elementów i wyzeruj tą tablicę.
  2. Czytaj wejście literka po literce. Rzutuj literkę na inta int numer = (int)literka i zrób tablica[numer]++ bo zliczasz że literka o takim numerze wystąpiła kolejny raz.
  3. 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ętlach znak oraz tablica[(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;
}

http://ideone.com/1HZOJa

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 ?

0

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 ?

0

To sobie dodaj w pętli warunek żeby nie wypisywać jak jest 0 ? o_O

0

No ale jak... probowalem ifem ale nie wyszlo :(

0
    
    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]);
        }
    }
0
Cjvq napisał(a):

No ale jak... probowalem ifem ale nie wyszlo :(

To wklej kod tej próby, a nie czekasz na gotowca.

0

Nie odpowiadajcie koledze bo to jest troll z tora.

1 użytkowników online, w tym zalogowanych: 0, gości: 1