Poslednji karakter

Autor zadatka: Aleksandar Vasiljević <alexva02@uns.ac.rs>

Napisati program koji izračunava udeo reči u polaznom stringu koje se završavaju zadatim karakterom.

Na početku programa, od korisnika se zahteva da unese string maksimalne dužine 100 karaktera. Nakon toga korisnik unosi karakter za koji želi da proveri koliko se reči njime završava (pomoć: prvo izbaciti interpunkcijske znakove iz polaznog stringa). Na kraju ispisati string tako da su svi karakteri kojima odgovara parni indeks velika.

Primer rada programa:

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

Primer rešenja

 1#include <stdio.h>
 2#include <string.h>
 3
 4#define DUZINA 100 + 1
 5
 6int main()
 7{
 8    char polazni[DUZINA], krajnji[DUZINA], k;
 9    int brojac = 0, broj_reci = 0, i, ki = 0;
10
11    printf("Unesite polazni string: ");
12    fgets(polazni, DUZINA, stdin);
13
14    int duzina_polazni = strlen(polazni);
15    if (polazni[duzina_polazni - 1] < '\n')
16    {
17        polazni[duzina_polazni - 1] = '\0';
18        duzina_polazni--;
19    }
20
21    printf("Unesite karakter: ");
22    scanf("%c", &k);
23
24    for (i = 0; i < duzina_polazni; i++)
25    {
26        if ((polazni[i] >= 'A' && polazni[i] <= 'Z') || polazni[i] == ' ' || (polazni[i] >= 'a' && polazni[i] <= 'z'))
27        {
28            krajnji[ki] = polazni[i];
29            ki++;
30        }
31    }
32
33    krajnji[ki] = '\0';
34
35    int poslednja_rec, prethodno_slovo = 0;
36    for (i = 0; i < strlen(krajnji); i++)
37    {
38        if (krajnji[i] == ' ' && prethodno_slovo != 0)
39        {
40            broj_reci++;
41            poslednja_rec = i;
42            if (krajnji[i - 1] == k)
43            {
44                brojac++;
45            }
46            prethodno_slovo = 0;
47        }
48        else if ((krajnji[i] >= 'A' && krajnji[i] <= 'Z') || (krajnji[i] >= 'a' && krajnji[i] <= 'z'))
49        {
50            prethodno_slovo = 1;
51        }
52    }
53
54    if (krajnji[strlen(krajnji) - 1] == k)
55    {
56        broj_reci++;
57        brojac++;
58    }
59    else if (krajnji[strlen(krajnji) - 1] != ' ')
60    {
61        broj_reci++;
62    }
63
64    printf("\nUdeo reci u polaznom stringu koji se zavrsavaju karakterom '%c' je %.2f%%.", k, ((float)brojac / broj_reci) * 100);
65
66    for (i = 0; i < strlen(krajnji); i++)
67    {
68        if (i % 2 == 0 && krajnji[i] >= 'a' && krajnji[i] <= 'z')
69            krajnji[i] = krajnji[i] - 32;
70    }
71
72    printf("\nString nakon modifikacije: %s\n", krajnji);
73
74    return 0;
75}