C++左旋字符串

来源:互联网 发布:淘宝找词工具 编辑:程序博客网 时间:2024/06/07 23:28
//左旋转字符串abcdefgh->cdefghab//循环递归法#include <iostream>#include <string.h>using namespace std;void runstring(char *str,int n){    int i = 0;    int j = i+n;    int len = strlen(str);    char *p = str;    char ch;    while(j<len)    {        for(int m=0;m<n;m++)        {            if(p[j]=='\0')break;            ch = p[i];            p[i]=p[j];            p[j]=ch;            i++;j++;        }    }    //此时defgh cab后面的cab需要在进行旋转.    for(int k=0;k<n-len%n;k++)    {        //最后面需要旋转的字符串是len%n,因为不满足n位,于是我先交换len%n位,        //这样就只查n-len%n位就可以转换号了,于是我将剩余的部分进行右旋转.        ch=p[i];        int m;        for(m=i;m<len-1;m++)        {            p[m]=p[m+1];        }        p[m]=ch;    }} int main(){    char str[]="abcdefghmk";    runstring(str,3);//总共10位,而我们需要3位的转动,则呢么做呢?    cout<<str<<endl;    return 0;}//<指针反转法>#include <iostream> //一旦出现移动位数不够的情况就跳出循环,开始移动.#include <string.h>iusing namespace std;void runstring(char *str,int n){    if(n<=0 || str==NULL)return;    //char *fptr = str;    //char *lptr = str+n;    char *p  = str;    int len = strlen(str);    int i = 0;    int j = i+n;//    int k;    char ch;    while(len-j>=n)    {        for(k=0;k<n;k++)        {        ch = p[j];        p[j] = p[i];        p[i] = ch;        i++;        j++;        }    }    n = len-j;    for(k=0;k<n;k++)    {        ch = p[len-1];        int sum = len-1;        for(int m = 0;m<=j-i;m++)        {            p[sum] = p[sum-1];            sum--;        }        p[sum]=ch;    }}int main(){    char str[]="abcdefghlm";    runstring(str,4);    cout<<str<<endl;    return 0;}//<暴力移位法>#include <iostream>#include <string.h>using namespace std;void runstring(char *str,int n){    if(str==NULL || n==0)return;    if(n>0)    {        for(int i=0;i<n;i++)        {            char *p  = str;            char ch=p[0];            while(*p!='\0')            {            *p=*(p+1);            p++;            }            *(p-1) = ch;        }    }else    {        int m = strlen(str);        for(int i=0;i<-n;i++)        {            char *p = str+m-1;            char ch = *p;            int save = m-1;             while(m-1>0)            {                   *p = *(p-1);                p--;                m--;            }            *p=ch;          m=save;         }    }}int main(){    char str[]="abcdefgh";    runstring(str,0);    cout<<str<<endl;    return 0;}
1 0
原创粉丝点击