wordpress vip,seo搜索引擎优化工资多少钱,域名注册价格及续费,佛山网站建设哪家专业使用多种方法实现字符串左旋转
一、 左移法
思路#xff1a;每一次通过移动第一个字符#xff0c;然后把后面的字符前移#xff0c;然后再进行移动第一个字符再前移。故需要使用嵌套循环#xff0c;外层循环控制移动第一个字符的次数#xff0c;第二个循环进行字符前移 …使用多种方法实现字符串左旋转
一、 左移法
思路每一次通过移动第一个字符然后把后面的字符前移然后再进行移动第一个字符再前移。故需要使用嵌套循环外层循环控制移动第一个字符的次数第二个循环进行字符前移
代码如下
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
#include string.h
#include assert.hvoid left_move(char* arr, int k)
{ assert(arr);//断言引用头文件 assert.hint len strlen(arr);//注意引头文件 string.hfor (int i 0; i k; i){char tmp *arr;//使用临时值接收第一个字符for (int j 0; j len - 1; j)//前移{*(arr j) *(arr j 1);}*(arr len - 1) tmp;//把最后一个字符放回最后一个数组位置}
}
int main()
{int k 0;char arr[30] ABCD;printf(请输入要左旋转字符的个数k:);scanf(%d,k);left_move(arr, k);printf(%s, arr);return 0;
}二、分步逆序法
思路先使用一个移动函数把前k个字符反转再移动k后面字符反转。最后整体反转。即数组ABCD k为21.BA-2.DC-3DCBA。
代码如下
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
#include string.h
#include assert.hvoid reserve(char* left,char* right)//初始位置 旋转位置
{assert(left right);while (left right)//循环进行交换字符{char tmp *left;*left *right;*right tmp;left;right--;}
}void left_move(char* arr, int k)
{int len strlen(arr);reserve(arr,arrk-1);reserve(arrk, arrlen-1);reserve(arr,arrlen-1);
}int main()
{int k 0;char arr[30] ABCD;printf(请输入要左旋转字符的个数k:);scanf(%d,k);left_move(arr, k);printf(%s, arr);return 0;
}三、函数法
思路使用strncat把数组arr复制一份并放在arr数组中。通过循环直接获取对应位置字符串方法arr2即可。
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
#include string.h
#include assert.hvoid left_move(char* arr, char* arr2, int k)
{int len strlen(arr);strncat(arr, arr, len);//ABCD-ABCDABCDfor (int i 0; i len; i){arr2[i] *(arr k i);//获取k i个字符}
}int main(void)
{int k 0;char arr[30] ABCD;char arr2[30] { \0};printf(请输入要左旋转字符的个数k:);scanf(%d, k);left_move(arr,arr2,k);printf(%s, arr2);return 0;
}