精华内容
下载资源
问答
  • C语言请实现字符串循环右移函数

    千次阅读 2018-09-20 13:56:51
    C语言请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg”  #include <stdio.h> #include <string.h> #include <assert.h> void Ri...

    转载:https://blog.csdn.net/archyli/article/details/53562945

    C语言请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg” 

    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    
    void RightLoopMove(char *pStr, unsigned short steps)
    {
        int i = 0;
        int len = strlen(pStr);//字符串长度
        assert(pStr);
        for (i = 0; i < steps; i++)
        {    //pStr表示字符串头(序号为0,和数组一样理解)  len-1是字符串序号的最大排序,
            char *pend = pStr + len - 1;//指针指向了字符串的尾部
            //将尾部的数据取出来放到临时变量tmp里
            char tmp = *(pStr + len - 1);//获取字符串尾部的字符(这里*  是指针解引用,取出具体值)
            while (pStr <= pend)//判断字符串尾指针是否指过了字符串头
            {
                *pend = *(pend - 1);//将字符串前一个字符拿出来,放到字符串后面
                pend--;//字符串尾指针,又向头指针的方向走一个,然后又替换一次数据,从而达到所有字符右移一个的目的
            }
            //当所有字符串整体右移一位时,最后将临时变量的值放到字符串头
            *pStr = tmp;
        }
    }
    int main()
    {
        char str[] = "abcdef";
        RightLoopMove(str,1);
        printf("%s\n", str);
        getchar();
        return 0;
    }
    

     

    展开全文
  • 请实现字符串循环右移函数。 列如字符串“abcdefghi”向右移2位就是“hiabcdefg” 。 函数原型为:void RightLoopMove(char *pstr,unsigned short steps) 函数参数说明:  pStr: Point to a ‘\0’ terminated ...

    题目:请实现字符串循环右移函数。

    列如字符串“abcdefghi”向右移2位就是“hiabcdefg”

    函数原型为:void RightLoopMove(char *pstr,unsigned short steps)

    函数参数说明:
       pStr: Point to a ‘\0’ terminated string

       steps: The rotate shift numbers


    方法一:分三次翻转达到右移字符串的目的


    代码实现如下:

    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    void reverse(char *left, char *right)
    {
    	char temp;
    	assert(left);
    	assert(right);
    	while (left < right)
    	{
    		temp = *left;
    		*left = *right;
    		*right = temp;
    		left++;
    		right--;
    
    	}
    }
    void RightLoopMove(char *pstr, unsigned short steps)
    {
    	int n = strlen(pstr);
    	reverse(pstr, pstr + n - steps - 1);//第一次循环
    	reverse(pstr + n - steps, pstr + n - 1);//第二次循环
    	reverse(pstr, pstr + n - 1);//第三次循环
    }
    int main()
    {
    	char arr[] = "abcdefghi";
    	RightLoopMove(arr, 2);
    	printf("%s\n", arr);
    	system("pause");
    	return 0;
    }



    方法二:首先将最后一个字符赋给一个临时变量,再将前面的字符依次往后挪动一个位置,最后再把临时变量赋给第一个字符,重复上述步骤,从而达到右旋字符串的目的。

    实现方法图示:


    代码实现如下:

    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    void RightLoopMove(char *pStr, unsigned short steps)
    {
    	assert(pStr);
    	assert(steps);
    	char *left = pStr;
    	char *right = pStr + strlen(pStr) - 1;
    	while (steps)
    	{
    		char tmp = *right;
    		char *p = right;
    		while (p > left)
    		{
    			*p = *(p - 1);
    			p--;
    		}
    		*left = tmp;
    		steps--;
    	}
    }
    int main()
    {
    	char a[] = "abcdefghi";
    	RightLoopMove(a, 2);
    	printf("%s\n", a);
    	system("pause");
    	return 0;
    }

    方法三:运用库函数strcpy,此方法也很简便。

    实现代码如下:

    #include<stdio.h>  
    #include<string.h>  
    #include<assert.h>   
    #define MAX_LEN 20  
    #pragma warning(disable:4996)
    void RightLoopMove(char *pStr, unsigned short steps)
    {
    	assert(pStr);
    	char arr[MAX_LEN] = { 0 };
    	int n = strlen(pStr) - steps;
    	strcpy(arr, pStr + n);     //需要移位的字符拷给arr  
    	strcpy(arr + steps, pStr);   //再把剩下的字符拷给arr  
    	*(arr + strlen(pStr)) = '\0';   //上一步会多拷steps个字符,加\0的同时也解决了这个问题。  
    	strcpy(pStr, arr);       //arr里的字符拷给源串  
    }
    int main()
    {
    	char arr[] = "abcdefghi";
    	RightLoopMove(arr, 2);  //测试右移两位  
    	printf("%s", arr);
    	getchar();
    	return 0;
    }






    展开全文
  • // 请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg” // 函数原型为:void RightLoopMove(char *pstr,unsigned short steps) #include #include #include void severse(char *p,...
    // 请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg”
    // 函数原型为:void RightLoopMove(char *pstr,unsigned short steps)
    #include <stdio.h>
    #include <assert.h>
    #include <string.h>
    void severse(char *p,char *q)       //字符串翻转
    {
    	char temp;
    	assert(p);
    	assert(q);
    	while(p<q)
    	{
    		temp=*p;
    		*p=*q;
    		*q=temp;
    		p++;
    		q--;
    	}
    }
    void RightLoopMove(char *pstr,unsigned short steps)
    {
    	int len=strlen(pstr);
    	severse(pstr,pstr+len-steps-1);       //前部分翻转
    	severse(pstr+len-steps,pstr+len-1);   //后部分翻转
    	severse(pstr,pstr+len-1);             //整体翻转
    }
    int main()
    {
    	char arr[]="abcdefghi";
    	RightLoopMove(arr,2);
    	printf("%s\n",arr);
    	return 0;
    }


    
    展开全文
  • 题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。 函数接口定义: int ArrayShift( int a[], int n, int m ); 其中a[]是用户传入的数组;n是...

    题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。
    函数接口定义:

    int ArrayShift( int a[], int n, int m );
    

    其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

    裁判测试程序样例:

    #include <stdio.h>
    #define MAXN 10
    
    int ArrayShift( int a[], int n, int m );
    
    int main()
    {
        int a[MAXN], n, m;
        int i;
    
        scanf("%d %d", &n, &m);
        for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
    
        ArrayShift(a, n, m);
    
        for ( i = 0; i < n; i++ ) {
            if (i != 0) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:
    6 2
    1 2 3 4 5 6
    输出样例:
    5 6 1 2 3 4

    int ArrayShift( int a[], int n, int m )
    {
        int b[n];
        for(int i=0;i<n;i++)
            b[i]=a[i];
        int i,j;
        i=m%n;
        int k=0;
        for(i;i<n;i++,k++)
            a[i]=b[k];
        for(j=0;j<m%n;j++,k++)
            a[j]=b[k];
        
        
    }
    
    展开全文
  • PTA 数组循环右移函数

    千次阅读 2019-02-23 17:08:08
    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(&gt;0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯a​n−1)变换为(an−m⋯a​n−1a​0a1⋯an−m−1)(最后m个...
  • 循环右移函数

    2011-06-29 11:48:00
    #include 2 #define rotl(x,n) ((((x)>(32-(n)))&((1 3 int main(void){ 4 unsigned int i = 0xabc; 5 printf("%lx/n",i); 6 i = rotl(i, 2); 7 printf("%
  • 编写一个函数,作用是把一个 char 组成的字符串循环右移 n 个。比如原来是“abcdefghi” 如果 n=2,移位后应该是“hiabcdefgh” 函数头是这样的: //pStr 是指向以'\0'结尾的字符串的指针 //steps 是要求移动...
  • 字符串循环右移

    2014-12-13 12:59:41
    字符串循环右移函数的实现已经有很多种方法了,我最近在做这道题的时候想到了一种暴力移位方法,思路很简单: 从最后一位字符往前交换移动,移至最左位,以此类推,循环就可以解决循环右移多位字符的方法 比如:...
  • 问题编写一个函数,作用是把一个 char 组成的字符串循环右移 n 个。比如原来是“abcdefghi”,如果 n=2,移位后应该是“hiabcdefgh“。 函数头是这样的: //pStr : 指向以’\0’结尾的字符串的指针 //steps: ...
  • 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a​0​​ a​1​​ ⋯a​n−1)变换为(a​n−m⋯a​n−1​​ a0a1⋯an−...
  • 循环右移

    2017-07-04 00:12:59
    编写一个函数,把一个char组成的字符串循环右移n位。 编写一个函数,把一个char组成的字符串循环右移n位。例如,原来是“abcdefghi”,如果 n=2,移位后应该是“hiabcdefgh”。 函数原型如下: //pStr...
  • right(unsigned value, int n) /*自定义循环右移函数*/ { unsigned z; z = (value >> n) | (value (16-n)); /*循环右移的实现过程*/ return (z); } left(unsigned value, int n) /*自定义...
  • 字符串循环右移n位,函数

    千次阅读 2014-11-15 10:40:24
    编写一个函数,作用是把一个 char 组成的字符串循环右移 n 个。比如原来是“abcdefghi” 如果 n=2,移位后应该是“hiabcdefgh” 函数头是这样的: //pStr 是指向以'\0'结尾的字符串的指针 //steps 是要求移动...
  • #include <iostream> #include <string>//标准C++ using namespace std; /* //已经实现 void swap(int& a, int& b) { int tmp = 0; tmp = a; a = b; b = tmp;... int M
  • 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a​0​​a​1​​⋯a​n−1​​)变换为(a​n−m​​⋯a​n−1​​a​0...
  • 字符串右移函数

    2015-06-28 00:34:05
    编写一个函数,作用是把一个 char 组成的字符串循环右移 n 个。比如原来是“abcdefghi” 如果 n=2,移位后应该是“hiabcdefgh”  分析:将字符串相加如:abcdefghi----》abcdefghiabcdefghi。这样可以解决右移...
  • 数组循环右移

    2020-02-24 22:29:44
    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a ​0 ​​ a ​1 ​​ ⋯a ​n−1 ​​ )变换为(a ​n−m ​​ ⋯a ​...
  • 数组元素循环右移

    2020-06-08 11:56:24
    请设计一C语言函数(注:只须写出函数,不必写出完整程序),该函数的功能是用尽可能高的时间效率与空间效率将一个int类型的数组A[0…n-1]的所有元素依次循环右移k个位置。 例如,对于某数组,当k=3时(即把数组所有...
  • #include #include #include .../*编写循环函数,使一个字符串循环右移n个字符*/ using namespace std; void LoopMove1(char *str,int n) { char *p=str; char temp[MAXLEN]; int len=strlen(str);
  • 习题8-3 数组循环右移

    2020-08-20 11:34:51
    本题要求实现一个对数组进行循环右移的简单函数: 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由 (a0a1…an-1)变换为(an-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 517
精华内容 206
关键字:

循环右移函数