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", ¬acija);
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}