我们在C语言中常常碰到字符串循环左右移位的题型,下面对其进行详解:
例如:有一组char的字符串:abcdefghijk 。你要循环左移3位变成ijkabcdefgh(也有写出ijkabcdefghi);或右移三位变成defghijkabc(也有写成cdefghijkabc);
首先我们来解决字符串循环右移的问题:
方法一:利用已有的字符串函数。
#include<stdio.h>
#include<string.h>
void rightloop(char *a, int n);
main()
{
char a[100]; int n;
printf("请输入要循环的字符串:/n");
scanf("%s",a);
printf("请输入要循环字符串的位数:/n");
scanf("%d",&n); //以上代码也可以直接赋初值,我考虑的是一般情况//
void rightloop(a,n); //本例以a[]="abcdefghijk", n=3为例讲解//
printf("输出循环右移的字符串:%s/n",a);
}
void rightloop(char *a, int n)
{
char b[100]; //数组b要做的够大即可//
int m;
m=strlen(a)-n; //求出除去要循环右移之后剩下的字符的个数//
strcpy(b,a+n); // a+n,a代表a[0]的地址再加上n,表示要把a[n]之后的字符串(即那些不用循环右移的字符,共有m个)复制到数组b中。这时b[]="defghijk"。 //
strcpy(b+m,a);