三种方法实现一个函数,可以左旋字符串中的k个字符-创新互联
例如:abcd左旋一个字符得到bcda,abcd左旋两个字符得到cdab
1.数组下标法
#include
#include
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
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
#include
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;
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文标题:三种方法实现一个函数,可以左旋字符串中的k个字符-创新互联
链接URL:http://cdiso.cn/article/cdghss.html