ROL na tablicach z przesunięciem

0

Mam char wyraz[] = "woda";

Jak zrobić ROL o jeden oraz pierwszą literę przesunąć na koniec
Po pierwszym wykonaniu powinno być "odaw"...

Jest na to jakaś prosta metoda? Czy musimy przesuwać w tablicy wszystkie wyrazy o jeden i skopiować pierwszy wyraz na koniec...

Czy można to jakoś wykonać na bitach.. ?

Chodzi mi o jakieś bardziej wyrafinowane czy ładniejsze wykonanie tego.

1

Masz powymieniać miejscami bajty a pytasz o operacjach bitowych?

const char wyraz[] = "woda";
char buf[sizeof(wyraz)];

memcpy(buf,wyraz,sizeof(buf)); // bo na zmiennej wyraz nie możesz tego zrobić.
ROL:

int len=strlen(buf);
if(len>1)
  {
   char x=*buf;
   memcpy(buf,buf+1,len-1);
   buf[len-1]=x;
  }
0

a dlaczego nie mogę tego zrobić??

 int len = strlen(wyraz);

    if(len>1)
    {
        char x= *wyraz;

        memcpy(wyraz,wyraz+1,len-1);
        wyraz[len-1]=x;
    }

działa bez problemu... ale może się mylę

0

Zależy jak stworzony jest ten napis. Jeżeli tak jak podałem to nie możesz zmieniać zawartości tego napisu. Chociaż niektóre kompilatory na to pozwalają.

0

oj przepraszam nie zauważyłem tego const.

0

Nawet jak zrobisz bez const:
char wyraz[] = "woda";
wyraz[0]='W';
To kod produkowany przez większość kompilatorów wywali wyjątek, Access Violation.

1 użytkowników online, w tym zalogowanych: 0, gości: 1