字符串——将一字符串从中间一分为二,并将前半段和后半段按顺序交换

对于一个字符串s[x]来说,若将其从中间一分为,并前后段按顺序进行交换,最容易想到的就是用i,j两个变量,分别指向前半段与后半段的第一个元素,然后交换并同步自增,直到交换完毕;i进行循环时,i的范围是从0到L/2-1(L=strlen(s))(i的范围与L的奇偶性无关);j进行循环时,就会出现一个问题,L为奇数时,j的初始值为L/2+1,j为偶数时,j的初始值为L/2;



对于j这种情况,可以有两种解决方案

观察奇,偶两种情况可以发现,除了j的初始值,i的初始结束,j的结束都相同,所以,可以转换思路,倒着进行交换,代码如下:

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

int main(void)
{
    char s[80],t;
    int i,j,l;
 //输入一个字符串
    gets(s);
    l=strlen(s);
//给i,j赋初始值
    i=l/2-1;
    j=l-1;
//进行循环交换
    while(i>-1)
    {
        t=s[i];
        s[i]=s[j];
        s[j]=t;
        --i;        //因为i,j是同步的,所以i停,j也停
        --j;
    }
//输出字符串
    puts(s);

    return 0;
}

第二种方法便是将,奇偶进行统一,或者用条件判断来给j赋值

//给i,j赋初始值
    i=0;
    j=l/2;
    if(l%2)
        j=l/2+1;
//循环进行交换
    while(i<l/2)
    {
        t=s[i];
        s[i]=s[j];
        s[j]=t;
        i++;
        j++;

    }

                  这段代码也可以再次进行改进,赋初始值时j=(l+1)/2;

猜你喜欢

转载自blog.csdn.net/qq2071114140/article/details/80328191