Open utterances-bot opened 1 year ago
Poštovani, primjer rješenja ne daje dobre rezultate kada polazni string počinje ili završava sa razmacima ili kada se između riječi nalazi više od jednog razmaka.
Ako je polazni string " test" (razmak na početku):
Unesite polazni string: test
Unesite karakter: t
Udeo reci u polaznom stringu koji se zavrsavaju karakterom 't' je 50.00%.
String nakon modifikacije: tEsT
Ako je polazni string "test " (razmak na kraju):
Unesite polazni string: test
Unesite karakter: t
Udeo reci u polaznom stringu koji se zavrsavaju karakterom 't' je 50.00%.
String nakon modifikacije: TeSt
Ako je polazni string "test test" (dva razmaka izmedju riječi):
Unesite polazni string: test test
Unesite karakter: t
Udeo reci u polaznom stringu koji se zavrsavaju karakterom 't' je 66.67%.
String nakon modifikacije: TeSt TeSt
#include <stdio.h>
#include <string.h>
#define DUZINA 100 + 1
int main()
{
char polazni[DUZINA], krajnji[DUZINA], k;
int brojac = 0, broj_reci = 0, i, ki = 0;
printf("Unesite polazni string: ");
fgets(polazni, DUZINA, stdin);
int duzina_polazni = strlen(polazni);
if (duzina_polazni < DUZINA - 1)
polazni[strlen(polazni) - 1] = '\0';
printf("Unesite karakter: ");
scanf("%c", &k);
for (i = 0; i < strlen(polazni); i++)
{
if ((polazni[i] >= 'A' && polazni[i] <= 'Z') || polazni[i] == ' ' || (polazni[i] >= 'a' && polazni[i] <= 'z'))
{
krajnji[ki] = polazni[i];
ki++;
}
}
krajnji[ki] = '\0';
int pronadjena_rijec = 0; // dodati ovu liniju
// promijeniti u: i <= strlen(krajnji)
for (i = 0; i <= strlen(krajnji); i++)
{
// dodati: || krajnji[i] == '\0'
if (krajnji[i] == ' ' || krajnji[i] == '\0')
{
if (pronadjena_rijec) // dodati ovaj if
{
pronadjena_rijec = 0; // dodati ovu liniju
broj_reci++;
if (krajnji[i - 1] == k)
{
brojac++;
}
}
}
else // dodati i ovaj else
{
pronadjena_rijec = 1;
}
}
// nepotrebno
/*
if (krajnji[strlen(krajnji) - 1] == k)
{
broj_reci++;
brojac++;
}
else
{
broj_reci++;
}
*/
printf("\nUdeo reci u polaznom stringu koji se zavrsavaju karakterom '%c' je %.2f%%.", k, ((float)brojac / broj_reci) * 100);
for (i = 0; i < strlen(krajnji); i++)
{
if (i % 2 == 0 && krajnji[i] >= 'a' && krajnji[i] <= 'z')
krajnji[i] = krajnji[i] - 32;
}
printf("\nString nakon modifikacije: %s\n", krajnji);
return 0;
}
Ako je polazni string " test" (razmak na početku):
Unesite polazni string: test
Unesite karakter: t
Udeo reci u polaznom stringu koji se zavrsavaju karakterom 't' je 100.00%.
String nakon modifikacije: tEsT
Ako je polazni string "test " (razmak na kraju):
Unesite polazni string: test
Unesite karakter: t
Udeo reci u polaznom stringu koji se zavrsavaju karakterom 't' je 100.00%.
String nakon modifikacije: TeSt
Ako je polazni string "test test" (dva razmaka izmedju riječi):
Unesite polazni string: test test
Unesite karakter: t
Udeo reci u polaznom stringu koji se zavrsavaju karakterom 't' je 100.00%.
String nakon modifikacije: TeSt TeSt
Primjer rada programa iz zadatka:
Unesite polazni string: Ovo je .primer nekog! stringa za prvi. kolokvijum koji nije tezak.
Unesite karakter: i
Udeo reci u polaznom stringu koji se zavrsavaju karakterom 'i' je 18.18%.
String nakon modifikacije: OvO Je pRiMeR NeKoG StRiNgA Za pRvI KoLoKvIjUm kOjI NiJe tEzAk
Zdravo Andrej,
Hvala na primećenoj grešci i predlogu ispravke. Isprobao sam bio tvoje rešenje i primetio da radi onako kako si napisao za jedan razmak, ali ako postoji više razmaka pre i posle reči, ne ponaša se odgovarajuće, pa sam malo doradio originalno rešenje da i to bude podržano. Uvedena je logička promenljiva prethodno_slovo
, koja će biti logički tačna ukoliko je prethodni karakter bio slovo. To će nam pomoći u situaciji kada imamo više razmaka jedan za drugim da odlučimo hoćemo li uvećati broj reči ili ne. Druga modifikacija je da će se broj_reci
na kraju uvećati samo ako poslednji karakter nije razmak, za slučajeve kada se na kraju ne nalazi traženo slovo.
Nadam se da će sad rešenje biti odgovarajuće. Slobodno javi ako primetiš još neki nedostatak. Hvala! :)
Pozdrav, Rade
Poštovani, hvala na odgovoru. Možete li mi reći koje testne primjere ste koristili kada ste testirali moj prijedlog rješenja? Svaki testni primjer koji sam probao daje isti rezultat kao ažurirano rješenje prikazano u tekstu zadatka. Hvala. 😃
Naravno, stavi dva ili više razmaka pre i/ili posle reči test. Recimo " test" ili "test ".
A, izvini, vidim sad da si i ti dodao sličnu logiku kao i ja što sam, isto tako, da testiraš i \0. Video sam samo zakomentarisani deo, pa sam mislio da je samo to bila ispravka. Verovatno je sa tim dodatnim u redu, isprobaću tako, pa javljam.
Poslednji karakter — Zbirka zadataka dokumentacija
https://programski-jezici-i-strukture-podataka.github.io/zbirka-zadataka/zadaci/2022/t12/poslednji-karakter/index.html