学习_指针操作解决约瑟夫出圈问题

这篇博客通过C语言讲解如何利用指针操作解决约瑟夫出圈问题。代码中定义了一个`rouand`函数,递归地处理字符串,将每n个字符取出并置为空,直到字符串取完。在main函数中,展示了对一个示例字符串的操作过程。
摘要由CSDN通过智能技术生成

#include <stdio.h>

//解决思路:使用递归调用直至将字符串取完

void rouand(char *p_str,int n)  //该函数接收传递来的字符串首地址和按n取数
{
    if(!(*p_str))  //递归调用的终止条件
    {
        return;
    }
    int i = 0,j = 0,k = 0;
    char *q_str = p_str;

    //遍历字符串,将符合n的倍数的值取出
    for(;*(q_str);q_str++)
    {
        i++;
        if(!(i%n))
        {
            printf("%c ",*q_str);
            *q_str = '\0';   //取出该值将其置为'\0',在下面的语句将其移至字符串尾
        }
    }
    if(i < n) //当剩余字符串小于n的长度时,另作处理
    {
        q_str = p_str;
        int tmp = n%(i+1);
        printf("%c ",*(q_str+tmp));
        *(q_str+tmp) = '\0';
    }
    printf("\n");
    q_str = p_str;
    for(j = 0;j < i;j++)  //遍历替换好'\0'的字符串,将所有'\0'的字符移至最后,形成新的字符串
    {      //为熟悉指针操作才这样,使用数组更容易实现
        if(!(*(q_str+j)))
        {
            for(k = j;k < i-1;k++)
            {
                *(q_str+k) = *(q_str+k+1);
                *(q_str+k+1) = '\0';
            }
        }
    }
    printf("%s\n",p_str);

    rouand(p_str,n);   //递归调用,直至字符串取完
}

int main()
{
   // char str[100] = "abcdefghijklmnopqrst";
    char str[100] = "abcde";
    printf("%s\n",str);
    rouand(str,4);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值