21年4月24小练习(一)

1. my_strcmp函数实现

int my_strcmp(const char* fs, const char* sc)
{
    assert(fs != nullptr && sc != nullptr);
    /*while ('' != *fs++ && '' != *sc++)*/  //这一句错了,后置++执行后,才进入循环体
                                                //这样漏掉了字符串第一个字符的比较
    while ('' != *fs && '' != *sc)
    {
        if (*fs == *sc)
        {
            fs++;
            sc++;
        }
        else 
        {
            break;
        }
    }
    return *fs - *sc;

}

2. 两次反转数组左右移

/*数学方法,两次对调,实现数组左移右移*/
#if 0
void ResArray(int *br,int left,int right)
{
    assert(br!=nullptr);
    while (left<right) 
    {
        int a = br[right];
        br[right] = br[left];
        br[left] = a;
        left++;
        right--;
    }
}

void leftArrMove_K(int *ap,int n,int k) 
{
    k = k % n;
    ResArray(ap, 0, k-1);
    ResArray(ap, k, n-1);
    ResArray(ap, 0, n-1);
}

void RighttArrMove_K(int* ap, int n, int k)
{
    k = k % n;
    ResArray(ap,n-k,n-1);
    ResArray(ap, 0, n-k-1);
    ResArray(ap, 0, n - 1);
}

int main() 
{
    const int size = 5;
    int ar[size] = { 1,2,3,4,5 };
    RighttArrMove_K(ar, size,5);

    for (int i = 0;i < 5;i++) {
        printf("%d",ar[i]);
    }
    return 0;
}

3. 结构体数组左右移

Linux学习笔记
原文地址:https://www.cnblogs.com/zealwang/p/14697414.html