#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 **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;
}