在线制作图片网站有哪些,重庆最新新闻热点事件,wordpress默认原始图片,鄂尔多斯网站建设公司字符串左旋
1.题目要求 实现一个函数#xff0c;可以左旋字符串中的k个字符。 例如#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 2.解法#xff1a; 设计循环使其可以旋1次#xff0c;然后让他执行n次是一个最简单的思路#xff1a; 函数实现#xf…字符串左旋
1.题目要求 实现一个函数可以左旋字符串中的k个字符。 例如 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 2.解法 设计循环使其可以旋1次然后让他执行n次是一个最简单的思路 函数实现
void TurnLeft(char* arr, int k)//字符串左旋
{int i 0;int j 0;size_t len strlen(arr);for (i 0; i k; i){char temp arr[0];for (j 0; j len - 1; j){*(arr j) *(arr j 1);}*(arr len - 1) temp;}
}改进一 这个思路当然可以但是一次一次转毕竟太麻烦就不能一次到位么 当然可以我们可以选择拼接法一次到位 函数实现
void leftRound(char * arr, int k)
{size_t len strlen(arr);int pos k % len; //断开位置的下标char temp[256] { 0 }; //更准确的话可以选择malloc len 1个字节的空间来做这个tempstrcpy(temp, arr pos); //先将后面的全部拷过来strncat(temp, arr, pos); //然后将前面几个接上strcpy(arr, temp); //最后拷回去
}改进二 这个方法要用到一个数组形成的辅助空间让人觉得有点不爽还可以有更好的选择例如ABCDEFG左旋3次后变成DEFGABC有一个特殊的操作方式 先将要左旋的前三个家伙逆序CBADEFG然后将后半段也逆序CBAGFED最后整体逆序DEFGABC即可。这样只需要做数值交换即可可以写一个函数帮我们完成局部逆序代码如下 函数实现
void reverse_part(char *str, int start, int end) //将字符串从start到end这一段逆序
{int i 0;int j 0;char temp 0;for (i start, j end; i j; i, j--){temp *(str i);*(str i) *(str j);*(str j) temp;}
}void leftRound(char * arr, int k)
{size_t len strlen(arr);int pos k % len;reverse_part(arr, 0, pos - 1); //逆序前段reverse_part(arr, pos, len - 1); //逆序后段reverse_part(arr, 0, len - 1); //整体逆序
}这样就舒服多了。