三种方法实现一个函数,可以左旋字符串中的k个字符
例如:abcd左旋一个字符得到bcda,abcd左旋两个字符得到cdab
1.数组下标法
#include<stdio.h>#include<string.h>void left_handed(char *str, int k){ int i; int count = 0; char temp; while (count < k) { temp = str[0]; for (i = 0; i < strlen(str)-1; i++) { str[i] = str[i + 1];//所有字符左移一位 } count++; str[strlen(str) - 1] = temp; }}int main(){ int k=0; char str[] = "abcdef"; printf("输入需要左旋多少个字符:\n"); scanf("%d",&k); left_handed(str,k); printf("%s",&str); return 0;}
2.指针法
#include<stdio.h>void left_move(char *str, int k){ while (k--)//相当于k!=0 { char *cur = str;//定义一个指针,存储字符串首地址 char tmp=*cur; while ((*(cur+1)) != '\0') { *cur = *(cur + 1);//字符串左移一位 cur++; } *(cur) = tmp; }}int main(){ char str[] = "abcd"; int k = 0; printf("请输入左移位数:\n"); scanf("%d",&k); left_move(str, k); printf("%s",str); return 0;}
3.指针==》逆序法
#include<stdio.h>#include<string.h>void Reverse(char *left, char *right)//逆序函数{ while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; }}void left_move(char *str, int k, int len)//左旋函数{ char *left = str; char *right = str+len - 1; if (k<0 || k>len) { printf("不合法!\n"); } else { Reverse(left, str+k-1);//地址,需要逆序的左右位置 Reverse(str+k , right); Reverse(left, right); }}int main(){ int k; printf("请输入左移位数:\n"); scanf("%d",&k); char str[] = "abcd"; int len = strlen(str); left_move(str,k,len); printf("%s",str); return 0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。