![]() |
c++ zliczanie liter
witma mam do napisania program ktory liczy wystapienie poszczegolnych liter we wczytanym ciagu i wyswietla ich statystyke. na koncy jeszcze ma wyswietlac litery ktore najczesciej wystepowaly i napisze ile razy wystapily. efekt ma byc taki
To jest to T 1 o 2 2 j 1 e 1 s 1 t 2 2 t 2 o 2 Najczesciej wystapily o,t po dwa razy Przyszedl mi do glowy tylko jeden pomysl jak to napisac mianowicie chcialem ten tekst zapisac do tablicy a potem porownywac i-ty element tablicy z reszta elementow tej tablicy ale nie wiem za bardzo jak to napisac. Prosze o jakies wskazowki albo o inne pomysly do rozwiazania tego poroblemu z gory dzieki |
Poszukaj rozwi***261;zania na forum 4programmers.net
|
Zrob zliczanie wszystkiego od ! do ~ (wszystko, czyli litery, cyfry, znaki).
Zadeklaruj tablice output 94 elem. Zainicjalizuj na 0. int output[94] = {}; //to chyba powinno zrobic co trzeba i teraz taki pseudokod FOR EVERY x_char IN input_string DO ++output[x_char - 33]; I teraz wypisujesz FOR x_char FROM 0 TO 93 DO PRINTCHAR(x_char+33); PRINTINT(output[x_char]); PRINTLN; Tak bym to probowal robic. |
Ok napisalem cos takiego
#include <cstdlib> #include <iostream> #include <conio.h> using namespace std; int main(int argc, char *argv[]) { int tab[256]={0}; int m; char tabi[m]; char itab[m]; int iMin,iMax,iMinInd,iMaxInd; int i; int j=0; char z; while (z!=13){ z=getche(); itab[j]=z; j++; } cout<<endl; for(i=0; i<=j; i++) tab[itab[i]]++; for(i=0; i<=(j-2); i++){ cout<<itab[i]<<" "<<tab[itab[i]]<<endl;} iMin=iMax=tab[itab[0]]; for (i=0;i<=(j-1);i++){ if (tab[itab[i]]>=iMax){iMax=tab[itab[i]];iMaxInd=itab[i];}} cout<<endl; cout<<"najczesciej wystepowaly"<<endl; cout<<char(iMaxInd)<<" "<<iMax<<" razy"<<endl; cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } No i prawie dziala ale jest program z liczeniem max chodzi o to ze jak jest kilka liter ktore wystapily najwiecej razy np w zdaniu "ttttoooo" to on wyswietla tylko ta ostatnia |
Cytat:
Acha ... zeby ten Twoj problem rozwiazac to musisz po prostu wziac iMax przed ta seria cout i przeleciec tablice i wypisac kazdy znak o krotnosci iMax. |
Ja sie tylko spytam na kit zapisujesz do tablicy ilosc wystepowania danych znakow, to jest absolutnie nie potrzebne. Najprosciej jest zrobic tak:
1. Zadeklarowac jedna tablice. 2. Wprowadzic do niej dane - za pomoca petli for 3. Kod:
For j = 65 To 90 - ta petla zaczyna sprawdzanie znakow ascii od A do Z |
Po pierwsze:
To jest bez sensu bo przechodzisz caly tekst dla kazdej litery oddzielnie. Bardzo nieefektywne rozwiazanie. Po drugie: Poza tym zobacz jak ma wygladac wyjscie, a jak wyglada Twoje wyjscie (kolejnosc, powtarzanie). Prawidlowo: INPUT: To jest to OUTPUT: T 1 o 2 2 j 1 e 1 s 1 t 2 2 t 2 o 2 Nie dosc ze wyzsza zlonosc (tylko o stala, ale nie mala - on ma ok. 4n, Ty masz wielkosc_alfabetu*n). Poza tym nie zapewniasz tej funkcjonalnosci zeby podawac podawac wszystkie odpowiedzi o maks. wystapieniu i Twoje rozwiazanie nie jest latwo przerabialne do tej formy (w szczegolnosci i tak pewniu musialbys uzyc tablicy). |
Wszystkie czasy w strefie CET. Aktualna godzina: 23:07. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.