FuzzBuzz (C语言)

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

void  reverseString(char* );

void  itoa(int ,char *);

char** fizzBuzz(int n, int* returnSize);

void swap(char *,int  ,int );




int main(void)

{       int n=15;

int returnsize=15;

char **ch;

        ch=fizzBuzz(n,&returnsize);

        for(int i=0;i<returnsize;i++)

                printf("%s\n",ch[i]);

        //释放fuzzBuzz函数里面分配的内存

free(ch[0]);

        free(ch);

}

//n--输入的整数n

//returnSize--返回的字符串数组的大小

char** fizzBuzz(int n, int* returnSize)

 {      char (*ch1)[9]; // 指向包含9个字符的字符数组,注意不是指向char字符   

        char **ch2; // 指向char字符的指针的指针

        ch1=malloc(n*9*sizeof(char));

        ch2=malloc(*returnSize*sizeof(char *));

        int i;

//分别判读i只能被3整除

// 只能被5整除

//既能被3也能被5整除

//不能被3也不能被5整除

        for(i=1;i<=n;i++)

        {

             if(i%3!=0 )

                {       if(i%5!=0)

                                itoa(i,ch1[i-1]);

                        else

                                strcpy(ch1[i-1],"Buzz");

                }

             else

                {       if(i%5!=0)

                                strcpy(ch1[i-1],"Fizz");

                        else

                                strcpy(ch1[i-1],"FizzBuzz");

                }

            if(i<=*returnSize)

 // ch1中字符串首字符的地址赋给ch2

                        ch2[i-1]=ch1[i-1];


        }

 //注意ch2是指针的指针

         return ch2;

}

//把大于0的整数转换为字符串(10进制形式)

void itoa(int k,char *s)

{

        int i=0;

        for(;k>0;k/=10,i++)

           s[i]=k%10+'0';

        s[i]='\0';

        reverseString(s);

}

//反转字符串

void reverseString(char* s)

{

    int i;

    int length=strlen(s)-1;

    for(i=0;i<length/2+1;i++)

        swap(s,i,length-i);

}


//交换元素

void swap(char * arr,int i ,int r)

{       char temp=arr[i];

        arr[i]=arr[r];

        arr[r]=temp;

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值