字符串翻转和左旋

问题一:将字符串“abcde”翻转成“edcba”;用start表示字符串的首地址,end表示字符串的最后一个字符的指针。

void reverse(char* start,char *end)
{    
    if(start==NULL||end==NULL)
        return ;
    while(start<end)
    {
        char temp=*start;
        *start=*end;
        *end=temp;
        start++;
        end--;
    }
}

问题二:将字符串“I am a student.”翻转,但是每个单词内的字符顺序不变,变成“student. a am I”。

void reversesentence(char *str)
{
    if(str==NULL)
        return;
    char *begin=str;
    char *end=str;
    while(*end!='\0')
        end++;
    end--;
    reverse (begin,end);
    
    end=str;
    while(*begin!='\0')
    {
        if(*begin==' ')
        {
            begin++;
            end++;
        }
        else if(*end==' '||*end=='\0')
        {
            end--;
            reverse(begin,end);
            begin=++end;
        }
        else
        {
            end++;
        }
    }
}

问题三:将字符串"abcdefg"左旋2位成字符串“cdefgab”;将字符串看成是两部分,前两位为第一部分,后面剩下的字符为第二部分。先将这两部分分别翻转,再将整体进行翻转。

void leftreverse(char *str,int n)
{
    int len=strlen(str);
    if(str!=NULL&&n>0&&n<len)
    {
        char *start1=str;
        char *end1=str+n-1;
        char *start2=str+n;
        char *end2=str+len-1;
        reverse(start1,end1);
        reverse(start2,end2);
        reverse(start1,end2);
    }
}
posted @ 2016-09-16 20:14  beaglebone  阅读(153)  评论(0编辑  收藏  举报