1、循环左移
给定字符串:abcdefg,要求循环左移两位,结果为:cdefgab。
思路:
- 将左移的数据保存到一个临时数组中
- 从开始处移动源数组,填补左移后产生的空位(从前往后移动)
- 将临时数组中的元素依次追加到2的后面
实现
void move_string_left(char *str, int mov)
{
if(str == NULL || mov <= 0)
return ;
//char tmp[mov];//this method of define array is wrong in C since mov is not sure before compile
char *tmp = (char*)malloc(sizeof(char)*mov);
int i = 0;
int len = strlen(str);
if(len == 0)
return ;
mov %= len;
if(mov == 0)
return;
for(i = 0; i < sizeof(tmp); i++)
tmp[i] = str[i];
tmp[i] = '\0';
for(i = 0; i < len - mov; i++)//从前往后,因为空位在前
str[i] = str[i+mov];
for(; i < len; i++)//从末尾补
str[i] = tmp[i-(len-mov)];
}
2、循环右移
给定字符串