张家界做网站,佛山网站建设外包,提升学历的正规机构,网站的更新频率一、前言 这个题目的完整题目是这样子的。
二、我们实现这个编程的思路
2.1暴力破解思想
假如有一个数组里面的字符串为”abcdef“#xff0c;我们这时候就这样先将字符”a“移到最后再将其余的字符前移。
2.2三步移动法
同样我们还是假设一个数组里面存的是字符串”abcd…一、前言 这个题目的完整题目是这样子的。
二、我们实现这个编程的思路
2.1暴力破解思想
假如有一个数组里面的字符串为”abcdef“我们这时候就这样先将字符”a“移到最后再将其余的字符前移。
2.2三步移动法
同样我们还是假设一个数组里面存的是字符串”abcdef“将数组可以划分成2个部分一个是我们要进行移动的数组即”ab“宁外一个部分就是”cdef“我们可以将ab进行逆序然后实现cdef逆序最后整体逆序就能得到我们想要的效果
三、代码实现
3.1暴力破解实现
#includestdio.h
#includeassert.h
#includestring.h
void left_move(char* arr, int k)
{//进行一次调换assert(arr!NULL);int len strlen(arr);int i, j;for (i 0; i k; i){char tmp *arr;for (j0;jlen-1;j){*(arr j) *(arr j 1);}*(arr len-1 ) tmp;}
}
int main()
{char arr[] abcdef;left_move(arr, 2);printf(%s\n, arr);return 0;
} 这个代码注意我们是使用变量tmp接收我之前写代码的时候是使用指针tmp接收并不能得到我们的效果。使用指针的话它仅仅表示指向首元素而我们的首元素的改变直接会改变我们tmp而这里我们使用变量就不会出现这个问题使用变量它开创一片空间能再里面存字符。 3.2三步交换法代码
#includestdio.h
#includeassert.h
#includestring.h
void my_reverse(char* left, char* right)
{assert(left ! NULL);assert(right ! NULL);while (left right){char tmp *left;*left *right;*right tmp;left;right--;}
}
void left_move(char* arr, int k)
{int len strlen(arr);my_reverse(arr, arr k - 1);//字符串左旁的倒序my_reverse(arr k, arr len - 1);//字符串右旁的倒序my_reverse(arr, arr len - 1);//整个字符串的倒序
}int main()
{char arr[] abcdef;left_move(arr, 2);printf(%s\n, arr);return 0;
} 这个代码中的while循环条件能直接用指针是因为指针指向的本身就是地址再通过自增和自减我们就能实现字符串的倒序排列 四、结语
希望大家指出不足