Rotiraj susede

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

Napisati program koji od korisnika očekuje da unese ulazni string i karakter. Kreirati novi string koji se dobija tako što se iz unetog stringa izbacuje svaka pojava karaktera i vrši se njegovo prebrojavanje. Radi jednostavnosti, pretpostaviti da uneti string sadrži isključivo mala ili velika slova. Nakon izbacenog karaktera potrebno je izvršiti šifrovanje. Šifrovanje se vrši rotacijom susednih karaktera (ukoliko je broj karaktera nakon izbacivanja neparan, poslednji karakter ostaviti nepromenjen):

Unesite zeljeni string (max duzine 21): propozicija
Uneti znak koji zelite da izbacite: o

Očekivani izlaz na ekranu je:

Karakter o je iz polaznog stringa izbacen 2 puta.
String nakon modifikacija: rpzpcijia

Primer rešenja

 1#include <stdio.h>
 2#include <string.h>
 3
 4#define MAX_STRING 21+1
 5
 6int main()
 7{
 8    char str[MAX_STRING],izmenjen[MAX_STRING],znak;
 9    int n,i,j,indIzmenjen=0,paran=0,brIzbacenih=0;
10    
11    do
12    {
13        printf("Unesite zeljeni string (max duzine %d):",MAX_STRING-1);
14        gets(str);
15    }while(strlen(str)<=0 || strlen(str)>MAX_STRING);
16    
17        
18    printf("Uneti znak koji zelite da izbacite:");
19    scanf("%c",&znak);
20
21    for(i=0;i<strlen(str);i++)
22    {
23        if(str[i]!=znak)
24        {   
25            izmenjen[indIzmenjen] = str[i];
26            indIzmenjen++;
27        }else
28            brIzbacenih++;
29    }
30    izmenjen[indIzmenjen]='\0';
31
32    if(strlen(izmenjen)%2!=0)
33        paran=1;
34
35    char temp;
36    for(i=0,j=i+1;i<strlen(izmenjen)-paran;i+=2,j+=2)
37    {
38        temp=izmenjen[i];
39        izmenjen[i]=izmenjen[j];
40        izmenjen[j]=temp;
41    }
42
43    printf("\tKarakter %c je iz polaznog stringa izbacen %d puta.\n",znak,brIzbacenih);
44    printf("\tString nakon modifikacija: %s\n",izmenjen);
45
46
47    return 0;
48
49}
50