编程实现字符串的循环右移
2018-03-19 14:20
141 查看
例题:输入一个字符串和一个整数,输出右移后的字符串。例如输入字符串str=“1234567”, 整型n=3,输出字符串str=“5671234”。
思想:step1.生成一个辅助数组temp
存放要前移的部分“567”。
step2.将没有前移的部分从后向前依次向后移动。str变成“1231234”。
step3.将辅助数组中的字符覆盖str前n位。str变成“5671234”。
char* Move(char *s, int n)
{
assert(s!=NULL);
int length=strlen(s);
if(n%length==0)//移动为长度的倍数相当于没移动
return s;
char *t=s;
char *temp=(char *)malloc(n);
//t指针指向末尾最后一个字符
while(*t){
t++;
}
t--;
//strlen函数实际上做了一次循环,这里其实可以用t-s+1得出length
n=n%length;
//将原字符串要提前的先储存进temp数组中
for(int i=0;i<n;i++)
{
temp[i]=*(t-n+1+i);
}
//将原字符串要往后挪的字符从后往前依次向后挪n个位置
for(int i=0;i<(length-n);i++){
*(t-i)=*(t-n-i);
}
//将temp数组中的字符串覆盖原字符串的前n个位置
for(int i=0;i<n;i++){
s[i]=temp[i];
}
//释放堆内存
free(temp);
return s;
}
int main(){
char str[100]="";
int n=0;
scanf("%s %d",str,&n);
Move(str,n);
cout<<str;
return 0;
}
思想:step1.生成一个辅助数组temp
存放要前移的部分“567”。
step2.将没有前移的部分从后向前依次向后移动。str变成“1231234”。
step3.将辅助数组中的字符覆盖str前n位。str变成“5671234”。
char* Move(char *s, int n)
{
assert(s!=NULL);
int length=strlen(s);
if(n%length==0)//移动为长度的倍数相当于没移动
return s;
char *t=s;
char *temp=(char *)malloc(n);
//t指针指向末尾最后一个字符
while(*t){
t++;
}
t--;
//strlen函数实际上做了一次循环,这里其实可以用t-s+1得出length
n=n%length;
//将原字符串要提前的先储存进temp数组中
for(int i=0;i<n;i++)
{
temp[i]=*(t-n+1+i);
}
//将原字符串要往后挪的字符从后往前依次向后挪n个位置
for(int i=0;i<(length-n);i++){
*(t-i)=*(t-n-i);
}
//将temp数组中的字符串覆盖原字符串的前n个位置
for(int i=0;i<n;i++){
s[i]=temp[i];
}
//释放堆内存
free(temp);
return s;
}
int main(){
char str[100]="";
int n=0;
scanf("%s %d",str,&n);
Move(str,n);
cout<<str;
return 0;
}
相关文章推荐
- 编程:实现对字符串进行循环右移,例如:输入abcdefgh,循环右移34位,输出ghabcdef
- 编程实现字符串的循环移位操作
- 编程实现字符串的循环右移
- 字符串处理函数的编程实现
- 字符串左旋--循环移位法(c++实现)
- PHP实现字符串翻转功能的方法【递归与循环算法】
- 编程实现获取两个字符串中最大相同子串
- 编程实现表示循环小数,例如将1/3表示为0.3(3)就是将循环节放在括号中
- 实现字符串右循环移位函数。
- 实现字符串右移循环
- C++实现将字符串循环左移n个位置
- 编程实现对输入的字符串进行逆序
- 编程之美的2.17,数组循环移位 & 字符串逆转(反转) Hello world Welcome => Welcome world Hello
- java中字符串处理、串联和转换的几个常用方法,以及如果需要自己编程实现的具体实施步骤。
- Android编程实现从字符串中查找电话号码的方法
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC
- 李白无事街上走,提壶去买酒,遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少酒?(使用FOR循环结构编程实现)
- 135、编程实现:找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为 "cad"
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- 一个小学奥数题的python实现(全排列,字符串循环移位,统计元素)