配列内の文字列位置を移動する方法を知っているかどうかお尋ねしたいと思います。このようなものを実装したいと思います。
a=1 の場合
1 2 0 0 0 0
a=2 の場合
0 0 1 2 0 0
a=3 の場合
0 0 0 0 1 2
私は今までコードを持っていません。ただ考えたいだけです。
#include <stdio.h>
#include <string.h>
/*
void rotate_right(char *str, size_t n){
size_t len = strlen(str);
char temp[n %= len];
memcpy(temp, str + len - n, n);
memmove(str + n, str, len - n);
memcpy(str, temp, n);
}
*/
void rotate_right1(char *str){
size_t len = strlen(str);
char temp = str[len-1];
memmove(str + 1, str, len - 1);
str[0] = temp;
}
void rotate_right(char *str, size_t n){
while(n--)
rotate_right1(str);
}
int main(void){
char data[] = "120000";
char wk[sizeof(data)];
int a;
for(a=1;a<=3;++a){
strcpy(wk, data);
rotate_right(wk, 2*(a-1));
printf("%s\n", wk);
}
return 0;
}
私は質問に参加しています-これはシフトですか、それともローテーションですか? シフトの場合、配列を最後から最初まで実行して、現在のセルとは a の位置にあるセルをコピーする必要があります。何かのようなもの:
for (i=N;i>=a;i--)
{
array[i]=array[i-a];
}
円形の場合は、必要な位置を更新する方法を見つける必要があります。たとえば、ia が 0 よりも小さい場合、Na などのようになります。