Snake i Kebab notacija

Autor zadatka: Rade Radišić <radisic.rade@uns.ac.rs>

Napisati program koji konvertuje uneti string veličine od najviše 30 karaktera u jednu od notacija: snake_case ili kebab-case. Snake notacija sadrži donju crtu (_) umesto razmaka, dok Kebab notacija umesto razmaka ima crticu (-). Korisnik bira u koju od navedenih notacija će biti konvertovan string. Normalizovati string tako da sadrži isključivo mala slova. U slučaju da string sadrži neki od znakova koji nisu slovo ili broj, izaći iz programa uz poruku greške. Ukoliko je konverzija uspešno sprovedena, ispisati rezultujući string, kao i ukupan broj konvertovanih karaktera u stringu.

Napomene

  • Obratiti pažnju na validaciju karaktera koji će biti korišćen za pretvaranje u određenu notaciju (može biti samo _ ili -)

  • Testirati program i za slučaj kad korisnik unese više karaktera od veličine ulaznog stringa

Primer rada programa:

Uneti string: Primer konverzije stringa
Izaberite notaciju (moguce vrednosti - i _): -

String nakon konverzije: primer-konverzije-stringa
Broj zamenjenih karaktera: 3

Primer rada programa u slučaju nevalidnog unosa sa tastature:

Uneti string: Primer nevalidnog stringa!?
Izaberite notaciju (moguce vrednosti - i _): _

Greska prilikom konverzije stringa u zadatu notaciju!

Primer rešenja

 1#include <stdio.h>
 2#include <stdio_ext.h>
 3#include <string.h>
 4
 5#define MAX_STR 31
 6
 7int main() {
 8    char str[MAX_STR], notacija;
 9
10    printf("Uneti string: ");
11    
12    fgets(str, MAX_STR, stdin);
13    int duzina_str = strlen(str);
14    if (str[duzina_str - 1] == '\n') {
15        str[duzina_str - 1] = '\0';
16    }
17
18    __fpurge(stdin);    // ukoliko se prekoraci broj slova koje str moze da primi, ostatak ostaje u stdin
19
20    do {
21        printf("Izaberite notaciju (moguce vrednosti - i _): ");
22        scanf("%c", &notacija);
23        __fpurge(stdin);
24    } while(notacija != '-' && notacija != '_');
25
26    char *s = str;
27    int broj_zamenjenih = 0, greska = 0;
28
29    while(*s != '\0') {
30        if(*s >= 'A' && *s <= 'Z') {
31            *s += 32;
32            broj_zamenjenih++;
33        } else if(*s == ' ') {
34            *s = notacija;
35            broj_zamenjenih++;
36        } else if((*s < 'a' || *s > 'z') && (*s < '0' || *s > '9')) {
37            greska = 1;
38            break;
39        }
40
41        s++;
42    }
43
44    if(greska) {
45        puts("\nGreska prilikom konverzije stringa u zadatu notaciju!");
46    } else {
47        printf("\nString nakon konverzije: %s\n", str);
48        printf("Broj zamenjenih karaktera: %d\n", broj_zamenjenih);
49    }
50
51    return 0;
52}