精华内容
下载资源
问答
  • 2009-11-01 17:23:27 #include "stdio.h"#include "string.h"#include void LoopMove(char *pStr, int steps){ int str_len; int shift_len; char *tmp_str = NULL; str_len = strlen(pStr)

    2009-11-01 17:23:27

     

    #include "stdio.h"
    #include "string.h"
    #include <stdlib.h>

    void LoopMove(char *pStr, int steps)
    {
        int str_len;
        int shift_len;
        char *tmp_str = NULL;
        
        str_len   = strlen(pStr);
        shift_len = str_len-steps;
        tmp_str = (char *)malloc(sizeof(char)*(str_len+1));
        if (tmp_str == NULL)
            return;
        if (steps >= str_len)
            return;
        strncpy(tmp_str, (pStr+steps), shift_len);
        strncpy(tmp_str+shift_len, pStr, steps);
        *(tmp_str+str_len) = '/0';
        strcpy(pStr, tmp_str);
        free(tmp_str);
    }

    int main(void)
    {
        int i;
        char *str;
        
        for (i = 0; i < 20; i++)
        {
            strcpy(str, "hello,world!");
            LoopMove(str, i);
            printf("%s/n", str);
        }
        return 0;
    }

     

    输出结果:

    hello,world!
    ello,world!h
    llo,world!he
    lo,world!hel
    o,world!hell
    ,world!hello
    world!hello,
    orld!hello,w
    rld!hello,wo
    ld!hello,wor
    d!hello,worl
    !hello,world
    hello,world!
    hello,world!
    hello,world!
    hello,world!
    hello,world!
    hello,world!
    hello,world!
    hello,world!

    展开全文
  • 【C语言】实现字符串移位函数

    千次阅读 2016-03-08 00:51:50
    请实现字符串移位函数,比如:"abcdefghi"循环右移2位就是"hiabcdefg"。 函数原型:void RightLoopMove(char *str, unsigned short steps) 函数参数说明: pStr: Point to a '\0' terminated string. steps: The ...

    请实现字符串右移位函数,比如:"abcdefghi"循环右移2位就是"hiabcdefg"。

    函数原型:void RightLoopMove(char *str, 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 RightLoopMove(char *pStr, unsigned short steps)
    {
    	int i = 0;
    	int len = strlen(pStr);
    	assert(pStr);
    	for (i = 0; i < steps; i++)
    	{
    		char *pend = pStr + len - 1;
    		char tmp = *(pStr + len - 1);
    		while (pStr <= pend)
    		{
    			*pend = *(pend - 1);
    			pend--;
    		}
    		*pStr = tmp;
    	}
    }
    int main()
    {
    	char str[] = "abcdef";
    	RightLoopMove(str, 2);
    	printf("%s\n", str);
    	getchar();
    	return 0;
    }


    ②三步翻转法:

    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    
    void StrReverse(char *pStart, char *pEnd)
    {
    	assert(pStart);
    	assert(pEnd);
    	while (pStart < pEnd)
    	{
    		char tmp = *pStart;
    		*pStart = *pEnd;
    		*pEnd = tmp;
    		pStart++;
    		pEnd--;
    	}
    }
    void RightLoopMove(char *pStr, unsigned short steps)
    {
    	int len = strlen(pStr);
    	assert(pStr);
    	StrReverse(pStr, pStr + len - 1 - steps);
    	StrReverse(pStr + len - steps, pStr + len - 1);
    	StrReverse(pStr, pStr + len - 1);
    }
    int main()
    {
    	char str[] = "abcdef";
    	RightLoopMove(str, 3);
    	printf("%s\n", str);
    	getchar();
    	return 0;
    }



    展开全文
  • 字符串右循环移位函数

    千次阅读 2015-03-30 16:13:03
    实现字符串右循环移位函数,比如“abcdefghi”循环右移俩位就是“hiabcdefg”
    <span style="background-color: rgb(51, 204, 0);">/*
    *请实现字符串右循环移位函数,比如“abcdefghi”
    *循环右移俩位就是“hiabcdefg”
    *函数原型:
    *        void RightLoopMove(char* pStr,unsigned short steps)
    *函数参数说明:
    *		 pStr:目标字符串;steps:右循环位数。
    */</span>
    
    #include<stdio.h>
    #include<string.h>
    
    void RightLoopMove(char* pStr,unsigned short steps)
    {
    	char temp;
    	int n = strlen(pStr);
    	int i = 0;
    
    	steps %= n;//如果享有移位steps过大,取余可提高效率
    
    	while(steps > 0)
    	{
    		temp = pStr[n-1];
    		//for(i=n;i>0;i--)//直接将最后一位‘\0’给覆盖,导致输出结果不可预定
    		for(i=n-1;i>0;i--)//将‘\0’保留
    		{
    			pStr[i] = pStr[i-1];
    		}
    		pStr[0] = temp;
    		steps--;
    	}
    }
    
    int main()
    {
    	char pStr[] = "abcdefghi";
    	RightLoopMove(pStr,10);
    	printf("%s\n",pStr);
    
    	return 0;
    }
    

    展开全文
  • 题目:请实现字符串右循环移位函数,比如:“abcdefghi”循环右移2位就是“hiabcdefg”. 方法一:移位法 方法二;翻转法

    题目:请实现字符串右循环移位函数,比如:“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<assert.h>
    #include<string.h>
    void RightLoopMove(char*pStr,unsigned short steps)
    {
        int len=0;
        char tmp=0;
        int i=0;
        int j=0;
        assert(pStr!=NULL);
        len=strlen(pStr);
        for(j=0;j<steps;j++)
        {
            tmp=*(pStr+len-1);
            for(i=0;i<len-1;i++)
            {
                *(pStr+len-1-i)=*(pStr+len-2-i);
            }
            *pStr=tmp;
        }
    }
    
    int main() 
    {
        char arr[]="abcddefghi";
        RightLoopMove(arr,2);
        printf("%s\n",arr);
        return 0;
    }

    这里写图片描述
    方法二:翻转法

    #include<stdio.h>
    #include<assert.h>
    #include<string.h>
    void Severse(char*p,char*q)//翻转函数
    {
        char tmp;
        assert(p);
        assert(q);
        while(p<q)
        {
            tmp=*p;
            *p=*q;
            *q=tmp;
            p++;
            q--;
        }
    }
    void RightLoopMove(char *pStr, unsigned short steps)
    {
        int len=strlen(pStr);
        assert(pStr);
        assert(steps);
        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;
    }

    这里写图片描述

    展开全文
  • 字符串移位算法总结

    2021-01-02 13:51:32
    字符串移位算法总结暴力遍历法空间换时间法库函数复制法取余法求逆交换法 题目如下: 把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,...
  • 给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是...
  • 字符串移位

    2019-10-05 21:01:08
    编写一个函数,其功能为将指定char字符数组循环移动指定位,例如: "abcd",移动2位,输出为:"cdab"。 解题思路: 要将一个char字符循环移动n位,则只要将此字符的总长度 - n(除'\0')位后的字符放到起始位,再将...
  • 方法一:开辟一个空间存放移位后的字符串,但是空间耗费大且引用了库函数。程序与测试如下: #include #include #include void RightLoopMove(char *pStr,unsigned short steps) { char *data; int len = ...
  • 在下面的算法中会用到strstr函数,在C语言里有这个函数的介绍。... 思路一找出字符串s1所有循环移位得到的字符串,看是否有字符串包含s2 voidrotate(char*s) { intlen=strlen(s); chartemp=s[0]; for(intj...
  • 字符串移位包含问题

    2020-10-02 11:29:24
    #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char s1[100],s2[100]; char tept[100];...//之间的内容交换 用strcpy函数 str
  • 其中n为字符串求要左移的位数; 先将要求左移的字符串str的前n个字节的数据拷贝至我们刚刚创建的buf中; 利用memmove函数将str的第n个字节的数据移动至str的开始处; 在利用memcpy或strncpy将buf中的...
  • 编写一字符串移动函数 char*shift ( char*pstr , int n , char* mode ),该函数的功能是:(1)当 mode = R 时,将字符串 pstr 循环右移n位:(2)当 mode=L 时,将字符串 pstr 循环左移n位返回值为移位后的字符串的...
  • 优化解法分别对循环移位和子字符串匹配进行了优化,由于contains函数的时间复杂度是O(mn)(查看jdk源码可知),所以用kmp算法(O(m+n))替换,可提高算法整体效率。//判断字符串a是否是字符串b循环移位结果的子字符串...
  • 字符串右移函数

    2015-06-28 00:34:05
    编写一个函数,作用是把一个 char 组成的字符串循环右移 n 个。比如原来是“abcdefghi” 如果 n=2,移位后应该是“hiabcdefgh”  分析:将字符串相加如:abcdefghi----》abcdefghiabcdefghi。这样可以解决右移...
  • 题目:编写一个函数,作用是把一个字符串循环左移/右移n位。比如:给定原字符串"abcdefgh",如果n=2,左移2位后应该是"cdefghab",右移两位后应该是"ghabcdef"。 (以右移为例) 方法一:按位移动 移动1位:habcdefg ...
  • 字符串操作函数

    2013-01-29 19:17:37
    1编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”  函数头是这样的: //pStr是指向以'\0'结尾的字符串的指针 //steps是要求移动的n ...
  • 字符串循环移位

    千次阅读 2017-08-05 23:15:00
    请实现字符串右循环移位函数,比如:”abcdefgh”循环右移两位就是”ghabcdef”.实现字符串循环移位可有多种方式: 老实方法:一个一个的移位,每次循环,先把最后一个保存起来,然后从后面开始往后挪一位。(如果...
  • 对于这道题的前两种思想书中已经给了比较详细的解答,下面只是对于前两种思想的小总结和对第三种思想的阐述。...这里补充一个C++ 标准库中String类的一个小用法,c_str()函数(并不推荐使用它来复制字符串
  • 问题描述:给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。例如给定s1=aabcd和s2=cdaa,函数返回true;给定s1=abcd,和s2=acbd返回false。  编程之美上解法二是将问题转化,将原来的...
  • 给一个S1=”AABCD”,判断S2是否能通过S1移位得到,例如S2=“CDAA”,应该返回true。#include #include using namespace std;/* 该函数主要是遍历的方法,将所有情况都测试一遍,效率较低 时间复杂度为O(n2) */ void...

空空如也

空空如也

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

字符串移位函数