come ruotare la stringa data a sinistra o destra in C?

Funzione C per ruotare una stringa di un numero dato a destra o a sinistra. Quando un personaggio viene ruotato oltre la fine o l’inizio di una stringa a seconda della direzione, dovrebbe avvolgere

Farei qualcosa di simile a questo:

 void rot(char *buf, int len, int r) { char *temp=malloc(r>=0?r:-r); if(r>=0) { memcpy(temp, buf+len-r, r); memmove(buf+r, buf, len-r); memcpy(buf, temp, r); } else { memcpy(temp, buf, r); memmove(buf, buf+r, len-r); memcpy(buf+len-r, temp, r); } free(temp); } 

purché naturalmente, len sia almeno 1, sapete, normali controlli di igiene.

Spostamento di elementi in un array C ++

Inoltre, http://www.cs.bell-labs.com/cm/cs/pearls/s02b.pdf

 #include  #include  #include  char* strrot (int offset, size_t size, const char *inStr); int main (int argc, const char * argv[]) { const char *rotStr = "rotateme"; size_t rotStrSize = strlen(rotStr); char *resultStr; resultStr = strrot(-3, rotStrSize, rotStr); printf("-3, %s\n", resultStr); free(resultStr); resultStr = strrot(2, rotStrSize, rotStr); printf("+2, %s\n", resultStr); free(resultStr); resultStr = strrot(11, rotStrSize, rotStr); printf("+11, %s\n", resultStr); free(resultStr); resultStr = strrot(0, rotStrSize, rotStr); printf("0, %s\n", resultStr); free(resultStr); resultStr = strrot(-11, rotStrSize, rotStr); printf("-11, %s\n", resultStr); free(resultStr); return 0; } char* strrot (int offset, size_t size, const char *inStr) { char *result = (char *)malloc(size * sizeof(char)); int trueOffset = size - (offset % size); int inIndex = trueOffset; int outIndex = 0; for (inIndex = trueOffset; inIndex < (int)size; inIndex++, outIndex++) { result[outIndex] = inStr[inIndex]; } for (inIndex = 0; inIndex < trueOffset; inIndex++, outIndex++) { result[outIndex] = inStr[inIndex]; } result[(int)size] = '\0'; return result; } 

risultati:

 -3, atemerot +2, merotate +11, emerotat 0, rotateme -11, atemerot